如何写入Python子进程的stdin?
我正在尝试编写一个Python脚本来启动一个子进程,并将其写入子进程stdin。我还希望能够确定子进程崩溃时要采取的措施。
我试图启动的过程是一个名为的程序nuke,它具有自己的Python内置版本,我希望能够向其提交命令,然后告诉其在命令执行后退出。到目前为止,我已经得出结论,如果我在类似这样的命令提示符下启动Python,然后nuke
作为子进程启动,那么我可以在中键入命令nuke
,但是我希望能够将其全部放入脚本中,以便Python程序可以启动nuke
,然后写入其标准输入(并因此写入其内置版本的Python),并告诉它执行令人讨厌的事情,因此我编写了一个如下所示的脚本nuke:
subprocess.call(["C:/Program Files/Nuke6.3v5/Nuke6.3", "-t", "E:/NukeTest/test.nk"])
然后什么也没有发生,因为nuke
正在等待用户输入。我现在将如何写入标准输入?
我这样做是因为我正在运行一个带有nuke
该插件的插件,导致它在渲染多个帧时间歇性崩溃。因此,我希望此脚本能够启动nuke
,告诉它执行某些操作,然后如果崩溃,请重试。因此,如果有一种方法可以捕获崩溃并且仍然可以,那么那就太好了。
回答:
最好使用communicate
:
from subprocess import Popen, PIPE, STDOUTp = Popen(['myapp'], stdout=PIPE, stdin=PIPE, stderr=PIPE)
stdout_data = p.communicate(input='data_to_write')[0]
“更好”,因为此警告:
请使用communication()
而不是.stdin.write,.stdout.read
或.stderr.read
来避免死锁,因为其他任何OS管道缓冲区中的任何一个都会填满并阻塞子进程。
以上是 如何写入Python子进程的stdin? 的全部内容, 来源链接: utcz.com/qa/417465.html