2014-01-06 6 views
0

Вот сценарий. Я хочу запустить программу командной строки из сценария python. Команда будет генерировать файл после выполнения, который я прочитал бы для некоторых дополнительных операций . Я хочу передать имя файла как параметр функции.Передача имени файла команде оболочки в python

def myfunc(myinputfile,myoutputfile): 
    cmd = "mycommand -i %s -o %s" %(myinputfile,myoutputfile) 

Я попытался с помощью subprocess.call, но, видимо, это требует от меня, чтобы написать имя_команды и аргументы, как отдельные записи в списке. Есть ли другой способ сделать это. Кроме того, важно, чтобы команда выполнялась перед продолжением, так как я хочу прочитать вывод из файла в переменную позже в скрипте.

+7

Зачем задавать аргумент командной строки как список проблем? 'subprocess.call (['mycommand', '-i', myinputfile, '-o', myoutputfile])' – falsetru

+0

Теперь я чувствую себя глупо. –

+0

Правила цитирования в командной строке - боль в заднице. Вы используете _should_ интерфейс, в котором вы передаете список (например, 'subprocess.call'). В противном случае все будет разваливаться, когда путь содержит забавный характер. И помните, что в Linux он может содержать _anything_ except nul byte, и хотя Windows исключает некоторые символы, они по-прежнему не исключают важный случай пространства, и они не исключают их в любом случае. –

ответ

1

Если вы не используете shell=True, вы должны передать список аргументов subprocess:

def myfunc(myinputfile,myoutputfile): 
    cmd = ['mycommand', '-i', myinputfile, '-o', myoutputfile] 

Это, кстати, делает его много проще использовать значения переменных в качестве аргументов ..

0

Если вы хотите вызвать команду оболочки, я предлагаю:

d = dict(os.environ.copy()) #copy enviroment 
    cmd = "mycommand -i %s -o %s" %(myinputfile,myoutputfile) 
    p = subprocess.Popen(cmd, shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.STDOUT,env=os.environ,cwd=PATHWHEREYOUHAVEACOMMAND,close_fds=True) 

, если вы хотите открыть терминал и запустить команду:

d = dict(os.environ.copy()) 
    cmd4="mycommand -i %s -o %s" %(myinputfile,myoutputfile) 
    cmd="gnome-terminal --working-directory=%s --title='your title' --command='%s' " % (yourpath,cmd4) 
    p = subprocess.Popen(cmd, shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.STDOUT,env=os.environ,cwd=PATHWHEREYOUHAVEACOMMAND,close_fds=True) 
Смежные вопросы