subprocess.Popen有时返回非零退出代码

时间:2017-09-27 14:03:53

标签: python subprocess multiprocessing exit-code

我的代码使用subprocess.Popen函数调用运行不同python脚本的许多进程,并等待所有这些进程完成运行。 有时(并非所有的运行,即使是相同的参数)一个或多个进程都没有运行(被调用代码中的第一件事是创建一个日志文件而不是在那些文件中创建例)。

for fname1 in input_files_1:
    cmd_list = create_batch_cmd(fname1)
    print (' '.join(cmd_list))
    p_list.append(Popen(' '.join(cmd_list), shell=True))
    logging.info("started process for %s" % fname1)

logging.info("waiting for processes")
ps_status = []
while True:
    ps_status = [p.poll() for p in p_list]
    if all([x is not None for x in ps_status]):
        break
logging.info("all processes finished")
print ps_status

ps_status通常是一个零列表。 在3个失败的12个进程中,ps_status是:

[0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0]

是什么导致这个?我该如何调查? 感谢

1 个答案:

答案 0 :(得分:0)

您的进程编号3,8,10失败,这不是一个python问题,因为所有其他人似乎工作正常。也许你应该做p.wait()而不是poll()