我正在运行一个在 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
,但得到了相同的结果。
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
您也可以尝试在循环中捕捉开路。