问题:如何从python代码调用Shell脚本?
如何从python代码调用Shell脚本?
回答 0
该子模块将帮助你。
显而易见的例子:
>>> import subprocess
>>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
其中test.sh
是一个简单的shell脚本,0
它是此运行的返回值。
回答 1
回答 2
如果要将一些参数传递给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
回答 3
import os
import sys
假设test.sh是您要执行的shell脚本
os.system("sh test.sh")
回答 4
如上所述,使用子流程模块。
我这样使用它:
subprocess.call(["notepad"])
回答 5
我正在运行python 3.5,subprocess.call([‘./ test.sh’])对我不起作用。
我给你三种解决方案,取决于你想对输出做些什么。
1-通话脚本。您将在终端中看到输出。输出是一个数字。
import subprocess
output = subprocess.call(['test.sh'])
2-调用和转储执行并将错误转换为字符串。除非您打印(stdout),否则您不会在终端中看到执行。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.txt的echo命令转储到temp_file中
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)
不要忘了看一下doc子流程
回答 6
子流程模块是启动子流程的好模块。您可以使用它来调用shell命令,如下所示:
subprocess.call(["ls","-l"]);
#basic syntax
#subprocess.call(args, *)
如果您的脚本是用.sh文件或长字符串编写的,则可以使用os.system模块。调用起来非常简单容易:
import os
os.system("your command here")
# or
os.system('sh file.sh')
该命令将运行脚本一次,直到完成,然后阻塞直到退出。
回答 7
如果脚本有多个参数
#!/usr/bin/python
import subprocess
output = subprocess.call(["./test.sh","xyz","1234"])
print output
输出将给出状态码。如果脚本成功运行,它将给出0,否则为非零整数。
podname=xyz serial=1234
0
下面是test.sh shell脚本。
#!/bin/bash
podname=$1
serial=$2
echo "podname=$podname serial=$serial"
回答 8
子过程很好,但有些人可能更喜欢脚本。Scriptine有更多高级方法,例如shell.call(args),path.rename(new_name)和path.move(src,dst)。Scriptine基于子流程和其他流程。
脚本的两个缺点:
- 即使足够,当前的文档级别也会更全面。
- 与子进程不同,scriptine软件包当前默认情况下未安装。
回答 9
我知道这是一个老问题,但是最近我偶然发现了这个问题,由于Subprocess API自python 3.5以来发生了变化,最终导致了我的误解。
执行外部脚本的新方法是使用run
函数,该函数运行args描述的命令。等待命令完成,然后返回CompletedProcess实例。
import subprocess
subprocess.run(['./test.sh'])
回答 10
如果您的Shell脚本文件没有执行权限,请按照以下方式进行操作。
import subprocess
subprocess.run(['/bin/bash', './test.sh'])
回答 11
请尝试以下代码:
Import Execute
Execute("zbx_control.sh")