2014-01-06 1 views
0

Мне нужно выполнить скрипт оболочки с помощью python. Вывод программы оболочки - это текстовый файл. Нет ввода сценария. Помогите мне решить это.subprocess.call() для программы оболочки, которая пишет файл

def invokescript(shfile): 
    s=subprocess.Popen(["./Script1.sh"],stderr=subprocess.PIPE,stdin=subprocess.PIPE); 
    return; 

invokescript("Script1.sh"); 

При использовании вышеуказанного кода, я получаю следующее сообщение об ошибке.

Traceback (most recent call last): 
    File "./test4.py", line 12, in <module> 
    invokescript("Script1.sh"); 
    File "./test4.py", line 8, in invokescript 
    s=subprocess.Popen(["./Script1.sh"],stderr=subprocess.PIPE,stdin=subprocess.PIPE); 
    File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
    raise child_exception 
OSError: [Errno 8] Exec format error 

Заранее спасибо ...

+0

может дублировать: http://stackoverflow.com/questions/4834483/is-this-the-right-way-to-run-a-shell-script-inside-python – atupal

+1

Нет необходимости в запятой в питоне – codeape

+0

ITYM 's = subprocess.Popen ([shfile], ...)'. В противном случае вам не понадобится этот параметр. – glglgl

ответ

0

Я использовал os.system() для вызова сценария оболочки. Это делает то, что я ожидал. Убедитесь, что вы импортировали модуль os в свой код python.

invokescript("Script1.sh") // Calling Function 

function invokescript(shfile): // Function Defenition 
    os.system("/root/Saranya/Script1.sh") 
    return; 

также следующее исполняемым:

invokescript("Script1.sh") // Calling Function 

function invokescript(shfile): // Function Defenition 
    os.system(shfile) 
    return; 

Спасибо за ваши непосредственные ребята реагирования.

0

Попробуйте это:

import shlex 

def invokescript(shfile): 
    return subprocess.Popen(
     shlex.split(shfile), 
     stderr=subprocess.PIPE, 
     stdin=subprocess.PIPE 
    ) 

invokescript("Script1.sh"); 

И добавить #!/usr/bin/env bash в свой Баш файл, конечно.

+0

Я думаю, что решение было здесь. В чем смысл вызова 'shlex.split()'? Здесь нечего расколоть ... – glglgl

+0

Хорошо, я редактировал код. Я добавил «shlex.split», потому что теперь функция более общая. – swietyy

+0

все еще я сталкиваюсь с той же ошибкой. Спасибо за ваш ответ – Lemon

Смежные вопросы