在Python中运行bash脚本
我有以下代码的问题:
callBash.py:
import subprocess print "start" subprocess.call("sleep.sh") print "end" sleep.sh:
 sleep 10 
我想在10秒后打印“结束”。 (我知道这是一个愚蠢的例子,我可以简单地睡在Python中,但这个简单的sleep.sh文件只是一个testing)
 使sleep.sh可执行文件并将shell=True添加到参数列表(正如前面的答案中所build议的)可以正常工作。 根据searchpath,您可能还需要添加./或其他适当的path。  (即,将"sleep.sh"更改为"./sleep.sh" 。 
 如果bash脚本的第一行是一个shell的path,那么shell shell=True参数是不需要的(在像Linux这样的Posix系统下) 例如#!/bin/bash 。 
 其实,你只需要添加shell=True参数: 
 subprocess.call("sleep.sh", shell=True) 
但要小心 –
警告如果与不可信input结合使用,调用shell = True的系统shell可能会带来安全隐患。 有关详细信息,请参阅常用参数下的警告。
资源
 如果sleep.sh具有shebang #!/bin/sh并且具有适当的文件许可权 – 运行chmod u+rx sleep.sh以确保它在$PATH那么代码应该按原样运行: 
 import subprocess rc = subprocess.call("sleep.sh") 
如果脚本不在PATH中,那么指定它的完整path,例如,如果它在当前工作目录中:
 from subprocess import call rc = call("./sleep.sh") 
 如果脚本没有shebang,那么你需要指定shell=True : 
 rc = call("./sleep.sh", shell=True) 
 如果脚本没有可执行权限,并且不能修改它,例如通过运行os.chmod('sleep.sh', 0o755)那么你可以将脚本作为文本文件读取,并将string传递给subprocess模块: 
 with open('sleep.sh', 'rb') as file: script = file.read() rc = call(script, shell=True) 
 确保sleep.sh具有执行权限,并使用shell=True运行它: 
 #!/usr/bin/python import subprocess print "start" subprocess.call("./sleep.sh", shell=True) print "end" 
 添加一个答案,因为我问这个问题后,如何从Python运行一个bash脚本。 如果您的脚本需要参数,则会收到错误的OSError: [Errno 2] file not found 。 比方说,你的脚本在睡眠时间参数: subprocess.call("sleep.sh 10")将无法正常工作,您必须将其作为一个数组传递: subprocess.call(["sleep.sh", 10])