Pyhton 不会等待 subprocess.call 完成

问题描述 投票:0回答:1

我正在运行一个在 Windows 上调用 powershell 的 python 脚本。但似乎 python 不会等待 powershell 脚本完成后再继续(或者至少看起来是这样)。这是我的代码:

import numpy as np
import subprocess 

filename = "out_test.txt"

subprocess.call(r"powershell.exe & '.\SIMION 8.1.lnk' fly --recording-output=.\out_test.txt .\optimize_setup.iob")

data = np.loadtxt(filename,skiprows=1)
print(len(data))

当我在 powershell 本身中使用它时,

subprocess.call
中调用的函数工作正常。基本上它运行一个程序并将输出保存在
out_test.txt
但是当我从 Python 运行时,我收到此错误:
FileNotFoundError: out_test.txt not found.
所以基本上 python 脚本移动到
data = np.loadtxt(filename,skiprows=1)
行,而不等待
subprocess.call
实际上生成文件。文件的长度不同,因此等待时间会有所不同,因此我不想手动添加等待时间(例如使用
time.sleep(1)
)。如何确保 python 等待
subprocess.call
完成?谢谢!

在网上我看到python应该自动等待

subprocess.call
,但事实并非如此。我尝试了
subprocess.run
,但得到了相同的结果。

python powershell command-line
1个回答
0
投票
如果您正在开发新代码(将阻塞直到进程结束),则

Subprocess.run
docs 中描述的推荐方法,如果您想在后台执行操作,则可以使用
Subprocess.Popen()
然后当您想要阻止直到完成时,请执行
join()
调用。

我无法运行您的代码,但您可能遇到的问题是进程已完成 - 但 Windows IO 尚未完成。这种情况经常发生在大文件上,您无法在保存它们时立即访问它们。

如果您确定该文件应该存在,通常不会花费太长时间。我已经这样处理过——不确定还有其他方法:

while True:
 if os.path.isfile(my_file_path):
     break
 else:
     time.sleep(.25) # avoid stressing the cpu and let operation finish
    
# open file and do logic

您也可以尝试在循环中捕捉开路。

© www.soinside.com 2019 - 2024. All rights reserved.