我在搅拌机中有一个 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()
我尝试使用 communcate 但它仍然没有用:
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')
原文由 Tak 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用
subprocess.call
来做到这一点。编辑:我想我对正在发生的事情有预感。该命令在您的 Mac 上有效,因为我相信 Mac 开箱即用地支持 Bash( _至少在功能上是等效的_),而在 Windows 上它看到您尝试运行“.sh”文件,而是启动我认为执行的 Git Bash开始时有几个叉子。
因为这个 Python 认为 你的脚本已经完成,PID 已经消失了。
如果我是你,我会这样做:
tempfile
模块在“启动”脚本中生成一个唯一的、不存在的绝对路径。希望这是有道理的。