如何从python代码调用shell脚本?
如何从Python代码调用shell脚本?
subprocess模块将帮助你。
明显微不足道的例子:
>>> import subprocess >>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the [] 0 >>>
其中test.sh
是一个简单的shell脚本, 0
是这个运行的返回值。
有一些方法使用os.popen()
(不推荐)或整个subprocess
os.popen()
模块,但这种方法
import sys, os os.system(command)
是最容易的之一。
如果你想传递一些参数到你的shell脚本,你可以使用shlex.split()方法:
import subprocess import shlex subprocess.call(shlex.split('./test.sh param1 param2'))
与test.sh
在同一个文件夹中:
#!/bin/sh echo $1 echo $2 exit 0
输出:
$ python test.py param1 param2
使用上述的subprocess模块。
我这样使用它:
subprocess.call(["notepad"])
import os import sys
假设test.sh是你想要执行的shell脚本
os.system("sh test.sh")
我正在运行python 3.5和subprocess.call(['./test.sh'])不适合我。
我给你三个解决scheme取决于你想要做的输出。
1 – 调用脚本。 您将在terminal中看到输出。 输出是一个数字。
import subprocess output = subprocess.call(['test.sh'])
2 – 调用并转储执行和错误到string。 除非打印(stdout),否则在terminal中不会看到执行。 Shell = True,因为Popen中的参数对我不起作用。
import subprocess from subprocess import Popen, PIPE session = subprocess.Popen(['test.sh'], stdout=PIPE, stderr=PIPE) stdout, stderr = session.communicate() if stderr: raise Exception("Error "+str(stderr))
3 – 调用脚本并在temp_file中转储temp.txt的echo命令
import subprocess temp_file = open("temp.txt",'w') subprocess.call([executable], stdout=temp_file) with open("temp.txt",'r') as file: output = file.read() print(output)
不要忘记看看docsubprocess
subprocess是好的,但有些人可能更喜欢scriptine 。 Scriptine有更多的高层次的方法,如shell.call(args) , path.rename(new_name)和path.move(src,dst) 。 Scriptine基于subprocess和其他。
圣经的两个缺点:
- 即使足够,当前文档级别也会更全面。
- 与subprocess不同的是,默认情况下目前还没有安装scriptine软件包。
subprocess模块是启动subprocess的好模块。 你可以用它来调用shell命令:
subprocess.call(["ls","-l"]); #basic syntax #subprocess.call(args, *)
你可以在这里看到它的文档。
如果你的脚本是用.sh文件或长string写的,那么你可以使用os.system模块。 这很简单,很容易调用:
import os os.system("your command here") # or os.system('sh file.sh')
这个命令将运行脚本一次,完成,并阻止,直到它退出。
请尝试以下代码:
Import Execute Execute("zbx_control.sh")