【问题标题】:Code execution is stuck at subprocess.call command? [duplicate]代码执行卡在 subprocess.call 命令? [复制]
【发布时间】:2020-01-04 23:37:47
【问题描述】:

我正在尝试让我的 Python 代码启动一个 .bat 文件,而该文件又启动一个 .exe 文件。进程启动后,我想在终止 .exe 进程之前等待一段时间。

但是,似乎没有执行启动 .bat 文件的 subprocess.call 命令之后的任何代码。

这是我目前的代码:

print("About to launch OTB!")

subprocess.call(
    ".\olympian.bat",
    cwd=str(Path(os.path.abspath(__file__)).parent.parent),
    shell=True,
)

print("About to sleep")

time.sleep(time_var)

print("Sleep over, will close OTB now!")

subprocess.call("taskkill /F /im olympian.exe")

print("OTB has been closed!")

程序确实启动了olympian.bat 进程,但是之后它不显示"About to sleep" 消息。

另外,olympian.exe 程序应该无限运行,除非我强行关闭它(在我的例子中使用 taskkill 命令)。

如果您需要更多信息,或者您知道如何优雅地使其工作,请告诉我。谢谢!

【问题讨论】:

  • 来自subprocess.call 的文档:“运行 args 描述的命令。等待命令完成,然后返回 returncode 属性。” docs.python.org/3/library/subprocess.html#subprocess.call
  • @IainShelvington 好的,那么,在运行我的代码的下一行之前,我该如何让它不等待启动的进程完成?非常感谢!

标签: python shell subprocess


【解决方案1】:

在 python 文档中,subprocess.call 将运行 args 描述的命令。等待命令完成,然后返回 returncode 属性。

因为这将无限运行(直到你杀死它),下一行代码永远不会完成。你可以改用subprocess.Popen

更多关于这个过程的信息可以在docs.找到

【讨论】:

  • 那么,在执行我的代码时,如何使用 Popen 让进程在后台运行?我已经检查了文档,但找不到我的问题的直接答案。
  • @TimesAndPlaces 我发现了一个类似的 SO question,其他人也有同样的问题。你可以查看here
  • @TimesAndPlacesL 可以调用Popen类实例的poll()方法查看是否完成。阅读documentation
猜你喜欢
  • 1970-01-01
  • 2014-07-15
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2012-07-08
  • 1970-01-01
  • 2014-04-24
相关资源
最近更新 更多