我有一个Python代码,其中定义了一些调用外部进程的函数。每个函数启动的每个进程都会生成运行下一个函数所需的最终产品。问题是脚本没有等待外部后台进程完成(我正在处理一些繁重的图像,因此该过程需要一段时间)。
我尝试使用
os.system()
、subprocess.call()
和 subprocess.run()
启动外部进程,但没有一个起作用。我还尝试过使用 time.sleep()
和 Event().wait()
,但它们也不起作用,因为它们也会停止外部后台进程。
部分代码:当调用
cmd
字符串时,会向图像处理程序启动外部进程。
即使第一次调用的产品尚未完成,第二次调用 function
时也会出现错误。
问题可能在于函数中没有返回特定的产品,因此 Python 无法识别产品何时完成。
import subprocess
def function(directory, exe, a, b):
cmd = directory + exe + a + b
subprocess.run(cmd)
function(directory1, exe1, a1, b1)
function(directory2, exe2, a2, b2) #directory2 is where the product obtained from function1 is saved.
function(directory3, exe3, a3, b3) #directory3 is where the product obtained from funciton2 is saved.
有没有办法停止执行以下命令,直到获得产品,而不停止后台进程?
有什么帮助吗?感谢您的任何建议!
subprocess.run
应该等待命令完成,然后返回。
要解决此问题,请尝试添加更多调试输出:
import subprocess
from subprocess import PIPE
def function(directory, exe, a, b):
cmd = directory + exe + a + b
print("Running", cmd)
result = subprocess.run(cmd, stdout=PIPE, stderr=PIPE)
print("Return code:", result.returncode)
print("STDOUT:", result.stdout)
print("STDERR:", result.stderr)
function(directory1, exe1, a1, b1)
function(directory2, exe2, a2, b2) #directory2 is where the product obtained from function1 is saved.
function(directory3, exe3, a3, b3)