我试图在bash脚本中运行Python和bash命令。 在bash脚本中,我想执行Python循环包含的一些bash命令:
#!/bin/bash
python << END
for i in range(1000):
#execute some bash command such as echoing i
END
我该怎么做?
答案 0 :(得分:38)
使用subprocess,例如:
import subprocess
# ...
subprocess.call(["echo", i])
还有其他功能,例如subprocess.call
:subprocess.check_call
。它与调用完全相同,只是如果执行的命令以非零退出代码返回,则抛出异常。这通常是脚本和实用程序中的可行行为。
subprocess.check_output
与check_call
的行为相同,但会返回程序的标准输出。
如果您不需要shell功能(例如变量扩展,通配符等),请不要使用shell = True (shell = False是默认值)。 如果你使用shell = True,那么shell转义是你使用这些函数的工作,如果传递了未经验证的用户输入,它们将成为安全漏洞。
os.system()也是如此 - 它是安全问题的常见来源。不要使用它。
答案 1 :(得分:17)
查看subprocess模块。有Popen方法和一些包装函数,如call
。
如果需要检查输出(检索结果字符串):
output = subprocess.check_output(args ....)
如果您想在继续之前等待执行结束:
exitcode = subprocess.call(args ....)
如果您需要更多功能,例如设置环境变量,请使用基础Popen构造函数:
subprocess.Popen(args ...)
记住子进程是更高级别的模块。它应该替换OS模块中的旧功能。
答案 2 :(得分:0)
从IDE(PyCharm)运行时,我使用了它。
import subprocess
subprocess.check_call('mybashcommand', shell=True)