2015-03-10 4 views
0

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

./goro-new export --branch=testing --file=corp/goro.sites/test/meta.json 

Finding pages ......... 
The following pages will be exported from Goro to your local filesystem: 

    /goro.sites/test/meta.json -> /usr/local/home/$user/schools/goro.sites/test/meta.json 

Export pages? [y/N]: y 
Exporting 1 pages .............................................................................................................. 0% 0:00:03 

Exported 1 pages in 3.66281s. 

Мой вопрос, как я могу ответить на «Y/N» в Экспорт страниц части? Я подозреваю, что мне нужно передать аргумент моему подпроцессу, но я относительно новичок на питоне, поэтому я надеялся на какую-то помощь. Ниже приводится распечатка моего тестирования в среде Python:

>>> import subprocess 
>>> cmd = ['goro-new export --branch=test --file=corp/goro.sites/test/meta.json'] 
>>> p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE, stdin=subprocess.PIPE) 
>>> out, err = p.communicate() 
>>> print out 
Finding pages .... 
The following pages will be exported from Goro to your local filesystem: 
/goro.sites/test/meta.json -> /var/www/html/goro.sites/test/meta.json 
Export pages? [y/N]: 

Как я могу передать в «Y/N», так это может продолжаться?

ответ

2

Вы используете функцию, которую вы уже используете, функцию communicate() и передаете все, что хотите, так как это параметр input. Я не могу проверить, что это работает, но это должно дать вам идею:

>>> import subprocess 
>>> cmd = ['goro-new export --branch=test --file=corp/goro.sites/test/meta.json'] 
>>> p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE, stdin=subprocess.PIPE) 
>>> out, err = p.communicate(input="y") 
>>> print out 
+0

Работаю как очарование, спасибо !!!! – user2690151

+0

@ user2690151 не стесняйтесь принять ответ, который предоставил решение. – msvalkon

0

Самый простой способ сделать это, если вы всегда хотите ответить да (который я предполагаю, что вы делаете) с некоторой Баш: yes | python myscript.py. Чтобы сделать это прямо в python, вы можете сделать новый subprocess.Popen (скажем, yes) с stdout=subprocess.PIPE и установить stdinp равным yes.stdout. Справка: Python subprocess command with pipe

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