【问题标题】:subprocess.Popen sometimes return non zero exit codesubprocess.Popen 有时返回非零退出代码
【发布时间】:2017-09-27 14:03:52
【问题描述】:

我的代码使用 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 通常是一个零列表。 在 12 个进程的运行中,当 3 个失败时,ps_status 为:

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

是什么原因造成的?我该如何调查? 谢谢

【问题讨论】:

  • 你知道你可以写ps_status = [p.wait() for p in p_list]而不是整个while-construct?

标签: python subprocess multiprocessing exit-code


【解决方案1】:

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

【讨论】:

  • 谢谢,问题可能出在服务器处理我的请求上
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 2019-02-25
  • 1970-01-01
  • 2015-07-02
  • 2014-10-10
  • 2020-02-19
相关资源
最近更新 更多