我不认为你可以获取创建该进程的代码之外的进程的标准输出 https://stackoverflow.com/questions/7603808/pipe-outputstdout-from-running-process-win32api
懒惰的方法就是通过管道输出mayabatch
到一个文本文件,然后在您自己的代码中定期轮询该文本文件,以便它在您的控制之下,而不是强迫您等待管道(这在 Windows 上尤其困难,因为 Windowsselect https://docs.python.org/2/library/select.html不适用于子进程使用的管道。
我认为这也是 Maya 内部所做的:默认情况下,mayaBatch 将其结果记录到名为的文件中mayaRenderLog.txt
在用户的 Maya 目录中。
如果您从命令行或 bat 文件运行 mayabatch,则可以将 stdout 传输到带有以下命令的文件:>
特点:
mayabatch.exe "file.ma" > log.txt
只要您仅打开该文本文件进行阅读,您就应该能够使用标准 python 从外部轮询该文本文件。这样做的优点是您可以控制检查文件的频率。
OTOH 如果您使用 python 执行此操作,则会有点困难,除非您不介意让 python 脚本闲置直到 mayabatch 完成。通常的子流程配方,使用popen.communicate()
将等待进程结束返回代码:
test = subprocess.Popen(["mayabatch.exe","filename.mb"], stdout=subprocess.PIPE)
print test.communicate()[0]
有效,但在进程终止之前不会报告。但你打电话来readlines
在进程的标准输出上将触发进程并一次报告一行:
test = subprocess.Popen(["mayabatch.exe","filename.mb"], stdout=subprocess.PIPE)
reader = iter(test.subprocess.readlines, "")
for line in reader:
print line
更多讨论here https://stackoverflow.com/questions/4417546/constantly-print-subprocess-output-while-process-is-running