我对以下代码有疑问:
调用Bash.py:
import subprocess
print "start"
subprocess.call("sleep.sh")
print "end"
睡眠.sh:
sleep 10
我希望在 10 秒后打印“结束”。 (我知道这是一个愚蠢的例子,我可以简单地在 python 中休眠,但是这个简单的 sleep.sh 文件只是作为一个测试)
原文由 user1638145 发布,翻译遵循 CC BY-SA 4.0 许可协议
我对以下代码有疑问:
调用Bash.py:
import subprocess
print "start"
subprocess.call("sleep.sh")
print "end"
睡眠.sh:
sleep 10
我希望在 10 秒后打印“结束”。 (我知道这是一个愚蠢的例子,我可以简单地在 python 中休眠,但是这个简单的 sleep.sh 文件只是作为一个测试)
原文由 user1638145 发布,翻译遵循 CC BY-SA 4.0 许可协议
If sleep.sh
has the shebang #!/bin/sh
and it has appropriate file permissions – run chmod u+rx sleep.sh
to make sure and it is in $PATH
then your代码应该按原样工作:
import subprocess
rc = subprocess.call("sleep.sh")
如果脚本不在 PATH 中,则指定它的完整路径,例如,如果它在当前工作目录中:
from subprocess import call
rc = call("./sleep.sh")
如果脚本没有 shebang 那么你需要指定 shell=True
:
rc = call("./sleep.sh", shell=True)
如果脚本没有可执行权限并且您无法更改它,例如,通过运行 os.chmod('sleep.sh', 0o755)
那么您可以将脚本作为文本文件读取并将字符串传递给 subprocess
模块:
with open('sleep.sh', 'rb') as file:
script = file.read()
rc = call(script, shell=True)
原文由 jfs 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答862 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
使 sleep.sh 可执行并将
shell=True
添加到参数列表(如先前答案中的建议)工作正常。根据搜索路径,您可能还需要添加./
或其他一些适当的路径。 (即,将"sleep.sh"
更改为"./sleep.sh"
。)shell=True
如果 bash 脚本的第一行是 shell 的路径,则不需要参数(在 Linux 等 Posix 系统下);例如,#!/bin/bash
。