Python Popen等待/轮询阻止执行

时间:2018-12-06 13:34:36

标签: python python-3.x subprocess popen

我需要执行一个带有参数的exe文件,该参数读取文件,进行一些计算并生成3个新文件。使用subprocess.Popen可以正常工作。但是为了检查它的执行情况,我使用了wait()。但是,当使用wait()时,该过程将无法进行,并且不会生成任何文件。我什至签入了任务管理器。该过程通常需要5秒钟才能完成,但是如果使用wait(),该过程将在一秒钟内结束。有人可以帮我吗?

process = subprocess.Popen(span_command, shell=True)

单独使用上面的代码片段可以正常工作,但是如果与process.wait()一起使用,该过程将停止。

1 个答案:

答案 0 :(得分:-1)

需要有关已执行程序的更多信息。

我认为您的程序在stdin关闭时结束。

例如,Windows上的date会期望输入并在收到一些输入时完成输入。

p2 = subprocess.Popen(["date"], stdout=subprocess.PIPE ,shell=True)
print(p2.returncode)
time.sleep(10)
print(p2.returncode)
print(p2.wait())
print(p2.returncode)

这可能是您的解决方案。等待一段时间,然后再致电wait

但是最好知道该程序如何对不同的输入做出反应并以stdin=subprocess.PIPEp2.communicate("some expected input")运行。

检查正在运行的程序的输出。

p2 = subprocess.Popen(["date"], stdout=subprocess.PIPE, stderr=subprocess.PIPE ,shell=True)
print(p2.wait())
print(p2.stdout.readlines())
print(p2.stderr.readlines())

这不是解决方案,而是调试过程。

没有理由不使用您提供的代码。 所以这是您没有给我们看的东西。首先怀疑是您正在运行的程序。