【发布时间】:2018-05-12 07:03:36
【问题描述】:
我正在尝试调用命令
ionic cordova prepare
提示“是/否”响应。我一直希望这是肯定的。当我尝试使用 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()
但它只是挂在命令上,似乎没有执行
【问题讨论】:
-
只有一个提示?那么,为什么要运行
yes_proc而不是foo_proc.communicate('y\n')将单个y传递给foo_proc的标准输入? -
你的意思是运行 foo_proc = Popen(['ionic', 'cordova', 'prepare'], stdin=PIPE, stdout=PIPE) foo_proc.communicate('y\n') 当我这样做时这似乎只是跳过命令。它永远不会执行
-
我的意思是运行什么?顺便说一句,将
['ionic', 'cordova', 'prepare']更改为['head', '-n', '1']时无法重现此问题,这意味着此ionic命令存在特定的问题。 -
上面的代码确实执行了
foo_proc。检查foo_proc.returncode——你会看到它被设置为一个数值,而在程序运行之前它是None。 -
顺便说一句,如果 stdin 是 TTY,许多表现良好的程序只会提示,但如果 stdin 是非TTY 对象,例如管道。我不知道这个“离子”工具,不管它是什么,但你可能会考虑沿着这些方向发展的潜力。扔掉标准错误,而不是记录它——尤其是在调试错误时! -- 很可能……对你的事业没有帮助。
标签: python shell process scripting subprocess