Python子进程命令应答提示

时间:2017-11-28 17:59:12

标签: python shell process scripting subprocess

我正在尝试调用命令

ionic cordova prepare

提示“Y / N”响应。我一直希望这是肯定的。当我尝试使用os.system时,它会挂在最后一部分,而不是移动到脚本的其余部分。有谁知道正确的写作方式。

这是我试过的

foo_proc = Popen(['ionic', 'cordova', 'prepare'], stdin=PIPE, stdout=PIPE)
yes_proc = Popen(['yes', 'y'], stdout=foo_proc.stdin)
foo_proc.communicate()[0]
yes_proc.wait()

但它只是挂在命令上似乎没有执行

4 个答案:

答案 0 :(得分:1)

从python 3.5开始,subprocess模块引入了高级run方法,该方法返回一个CompletedProcess对象:

subprocess.run(['somecommand', 'somearg'], capture_output=True, text=True, input="y")

请参阅文档here

答案 1 :(得分:1)

我在沟通几个Y / N /来回答由子进程启动的脚本时也遇到了问题...什么都没用,最后我没有找到任何好的“干净”解决方案,所以我使用了一个技巧: 我在其中编写了一个bash脚本(launch_script.sh):

echo -e "Y\nN\nY\n" | scripttoanswer.ksh

在其中,然后使用子进程简单地启动它:

subprocess.run(["/home/user/dev/my_project/launch_script.sh"], shell=True)

答案 2 :(得分:0)

同意Charles duffy在这里的例子,可能这可以帮助你!!

from subprocess import Popen,PIPE
foo_proc = Popen(['ionic', 'cordova', 'prepare'], stdin=PIPE, stdout=PIPE)
foo_proc.communicate(input='y')

答案 3 :(得分:0)

为我工作:

foo_proc = Popen(['ionic', 'cordova', 'prepare'], stdin=PIPE, stdout=PIPE)
foo_proc.stdin.write(b"y\n")
outputlog, errorlog = foo_proc.communicate()
foo_proc.stdin.close()