我正在尝试调用命令
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()
但它只是挂在命令上似乎没有执行
答案 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()