我试图利用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"它可以继续吗?
答案 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