我正在尝试编写一个启动子进程并写入子进程标准输入的Python 脚本。我还希望能够确定子进程崩溃时要采取的操作。
我试图启动的进程是一个名为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, STDOUT
p = Popen(['myapp'], stdout=PIPE, stdin=PIPE, stderr=PIPE)
stdout_data = p.communicate(input='data_to_write')[0]
“更好”,因为这个警告:
使用communicate()而不是.stdin.write、.stdout.read或.stderr.read来避免由于任何其他操作系统管道缓冲区填满并阻塞子进程而导致的死锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)