【发布时间】:2019-05-08 05:20:16
【问题描述】:
我需要执行一个带有参数的 exe 文件,该文件读取一个文件,进行一些计算并生成 3 个新文件。使用 subprocess.Popen 工作正常。但为了检查它的执行情况,我使用了wait()。但是当使用wait() 时,该过程不起作用并且不会生成任何文件。我什至检查了任务管理器。该过程通常需要 5 秒才能完成,但如果使用wait(),则该过程在一秒钟内结束。谁能帮帮我?
process = subprocess.Popen(span_command, shell=True)
上面的 sn-p 单独使用时可以正常工作,但如果与process.wait() 一起使用,则进程停止。
【问题讨论】:
-
你检查
process.returncode了吗? -
@Frane 它返回无,但我的文件正在生成。如果我使用
process.communicate(),则执行停止并且不会生成任何文件。 -
returncode == None表示进程未完成。您可能在没有process.wait()的情况下检查了它。直接在 shell 中运行 span_command 会发生什么?它是否曾经完成或正在等待一些输入?为什么你使用shell=True大部分是不需要的? -
@dbamistry:这似乎不可能出错; all
waitdoes on Windows is callWaitForSingleObjecton the process handle,然后一旦返回(表示进程退出),它会调用GetExitCodeProcess来填充returnvalue。在一般情况下,任何人都不应该导致过程表现不同。您将需要提供有关您的代码及其尝试运行的程序的更多信息,因为这应该在正常条件下正常工作。 -
鉴于
WaitForSingleObject是Windows 等待进程退出的标准方法(他们的example code for creating/waiting on processes uses it),这应该只能在正常情况下工作。 There are some potential deadlocks in a GUI program from using it,但症状会是死锁,而不是提前退出,并且您没有表明您的脚本是基于 GUI 的。
标签: python python-3.x subprocess popen