【问题标题】:Python subprocess running out of order on WindowsPython 子进程在 Windows 上乱序运行
【发布时间】:2014-11-18 05:23:40
【问题描述】:

我正在 Windows 上运行 python 脚本。 我有一个这样的python脚本:

subprocess.call(1)

subprocess.Popen(2)

subprocess.call(3)

当我运行脚本时,我得到的结果是这样的:

subprocess.call(3)

subprocess.call(1)

subprocess.Popen(2)

为什么会这样?

【问题讨论】:

  • Popen 很容易解释,因为它不一定要等待终止。很难解释为什么 call(3) 在没有看到更多代码的情况下首先完成。您可以在通话之间尝试sys.stdout.flush()。你还在等你的 Popen(2) 完成吗?

标签: python windows multithreading concurrency process


【解决方案1】:

您使用subprocess 创建的每个新进程都会产生一个新的子进程,因此得名。这意味着命令将在不同的时间完成运行,这意味着您以不同的顺序获得结果。

这与在 Python 中调用函数不同,其中函数在其他函数运行之前完成运行。

【讨论】:

  • call 应该等待完成。
  • @doogabides 好吧,如果 call 等待,进程如何在不同的时间完成?
  • subprocess.call "运行 args 描述的命令。等待命令完成,然后从文档返回 returncode 属性"。版本 2/3 完全相同的文档字符串。
  • @doogabides 那真的很奇怪,因为它的行为与其文档完全矛盾。
猜你喜欢
  • 2010-10-29
  • 2021-11-26
  • 2016-04-06
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多