我在搅拌机里有一个python脚本
subprocess.call(os.path.abspath('D:/Test/run-my-script.sh'),shell=True)
接下来是许多其他的代码,这些代码依赖于这个shell脚本来完成。发生了什么事,它不等待它完成,我不知道为什么?我甚至尝试使用Popen
而不是call
,如图所示:
p1 = subprocess.Popen(os.path.abspath('D:/Test/run-my-script.sh'),shell=True)
p1.wait()
我试着用commuincate但还是没用:
p1 = subprocess.Popen(os.path.abspath('D:/Test/run-my-script.sh'),shell=True).communicate()
这个shell脚本在MacOS上工作得很好(在更改路径之后),在使用subprocess.call(['sh', '/userA/Test/run-my-script.sh'])
时会等待
但是在Windows上,这就是所发生的事情,我在Blender中运行下面的python脚本,然后当它到达子进程行Git bash
时打开并运行shell脚本,Blender不等待它完成,它只是在控制台中打印Hello
,而不等待Git Bash完成。有什么帮助吗?
import bpy
import subprocess
subprocess.call(os.path.abspath('D:/Test/run-my-script.sh'),shell=True)
print('Hello')
默认情况下,
subprocess.run
将等待进程完成。您可以使用
subprocess.call
来实现这一点。编辑:我想我对发生的事情有预感。这个命令在你的Mac上起作用,因为我相信Macs支持Bash的开箱即用(至少在功能上是等价的),而在Windows上,它看到你试图运行一个“.sh”文件,而是触发Git Bash,我认为它在启动时会执行几个fork。
因为Python认为脚本已经完成,所以PID已经消失。
如果我是你,我会这样做:
希望这是有意义的。
您可以使用Popen.communicate API。
指挥部
与进程交互:将数据发送到stdin。从stdout和stderr读取数据,直到到达文件末尾。等待进程终止。
相关问题 更多 >
编程相关推荐