在python中运行bash脚本并等待shell命令完成
我有与Python3.x相同的问题。我尝试了提供的解决方案,但对我无效 Python不会等待bash脚本完成并在终止bash脚本之前打印“end” 我在窗户上,把cygwin装进去了 callBash.py:在python中运行bash脚本并等待shell命令完成,python,windows,bash,cygwin,wait,Python,Windows,Bash,Cygwin,Wait,我有与Python3.x相同的问题。我尝试了提供的解决方案,但对我无效 Python不会等待bash脚本完成并在终止bash脚本之前打印“end” 我在窗户上,把cygwin装进去了 callBash.py: import subprocess print("start") subprocess.call("sleep.sh",shell=True) print("end") #!/bin/bash sleep 10 睡眠。sh: import subprocess print("start
import subprocess
print("start")
subprocess.call("sleep.sh",shell=True)
print("end")
#!/bin/bash
sleep 10
睡眠。sh:
import subprocess
print("start")
subprocess.call("sleep.sh",shell=True)
print("end")
#!/bin/bash
sleep 10
您从不检查
subprocess.call的返回值,因此您的脚本可能无法正常启动,可能是因为路径/CWD无效或权限或其他原因
改为使用,以便在脚本无法运行时引发异常。例外情况并不容易被忽略
另外,如果您有Python 3,它会更新,并且通常更易于使用。因为您的脚本正在执行。。。没什么,你确定你在运行脚本吗?请改为尝试检查\u call
。它正在运行。我看到控制台等待10秒,然后关闭。你在Windows上吗?首先,您是如何运行bash脚本的?如果是通过Cygwin实现的,没有Cygwin版本的Python就无法实现。如果是通过MSYS,您可能希望显式调用MSYSbash
,并使用sleep.sh
作为其参数(并且不使用shell=True
)。哦,您正在使用windows。。。与哪些程序.sh文件关联?在控制台中尝试“cmd/c sleep.sh”,看看它是否会阻止…您应该在问题中指定“windows”。阅读本文,您将看到一节讨论如何创建“startupinfo”对象以传递给Popen构造函数。看起来你的代码会变得更复杂。但OP表示它正在运行,与当前进程分离/后台。不是我的DV顺便说一句,但也不是答案。哦,我误解了那部分。在这种情况下,我将把答案留在这里,作为一个半相关的建议。