如何从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")