【发布时间】:2017-03-01 00:16:52
【问题描述】:
让我们看看我能否说清楚...我是一个 Python 初学者,所以请耐心等待,这是我的第一个 Python 程序(尽管我熟悉其他几种语言的基本脚本)。我已经搜索了好几个小时,我确信这个问题的答案相当简单,但我还没有让它正常工作。
我正在编写一个应该启动多个命令行进程的代码,当每个进程完成时,我想更新 QTableWidget 中的一个单元格。该表有一行供每个进程运行,每一行都有一个单元格表示进程的“状态”。
如果我只做一个 for 循环,每行使用subprocess.call() 生成一个进程,我可以运行这个没有问题,但是这太线性了,我想同时将它们全部关闭而不是挂起程序每个循环周期。我一直在研究子流程文档,并且很难使用它。我知道我需要使用subprocess.Popen(这将防止我的程序在进程运行时挂起,因此我可以生成多个实例)。我遇到麻烦的地方是取回退出代码,以便我可以更新我的表,而无需挂起程序 - 例如使用 subprocess.wait() 后跟 subprocess.returncode 仍然只是坚持到过程完成。我需要一种“当过程完成时,检查退出代码并运行更新 QTableWidget 的函数。”
我确实发现这两个帖子似乎让我朝着正确的方向前进,但并没有完全让我到达那里:
Understanding Popen.communicate
How to get exit code when using Python subprocess communicate method?
希望这是有道理的。这是我的代码的简化版本,我意识到它是半生不熟和半坏的,但我已经搞砸了一个多小时,我已经忘记了一些事情......
import os, subprocess
ae_app = 'afterfx'
ae_path = os.path.join('C:/Program Files/Adobe/Adobe After Effects CC 2015/Support Files', ae_app + ".exe")
filename = "E:/Programming/Python/Archive tool/talk.jsx"
commandLine = 'afterfx -noui -r ' + filename
processList = [commandLine]
processes = []
for process in processList:
f = os.tmpfile()
aeProcess = subprocess.Popen(process, executable=ae_path, stdout=f)
processes.append((aeProcess, f))
for aeProcess, f in processes:
# this is where I need serious help...
aeProcess.wait()
print "the line is:"
print aeProcess.returncode
- 斯宾塞
【问题讨论】:
标签: python subprocess