python子进程和传入shell参数

时间:2015-03-10 18:53:25

标签: python shell

我试图利用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的新手,所以我希望得到一些帮助。下面是我在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 个答案:

答案 0 :(得分:2)

您使用已经使用的功能,communicate() -function并传递您想要的任何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

答案 1 :(得分:0)

如果您总是想回答“是”(我假设您这样做),最简单的方法就是使用一些bash:yes | python myscript.py。要在python中直接执行此操作,您可以使用subprocess.Popen创建一个新的yes(例如,称为stdout=subprocess.PIPE),并将stdin的{​​{1}}设置为等于p。参考:Python subprocess command with pipe