如何从python代码调用shell脚本?
当前回答
import os
import sys
假设test.sh是您想要执行的shell脚本
os.system("sh test.sh")
其他回答
使用@Manoj-Govindan的答案,我发现我可以从python运行简单的shell脚本,但我拼命想要运行的脚本会因为错误而失败
Syntax error: "(" unexpected
我把第一个参数从'sh'改成了'bash',还有viola!突然,它执行了。
subprocess.call(['bash', './test.sh'])
Subprocess模块是启动子进程的好模块。 你可以使用它来调用shell命令,如下所示:
subprocess.call(["ls","-l"]);
#basic syntax
#subprocess.call(args, *)
你可以在这里看到它的文档。
如果您的脚本是用.sh文件或长字符串编写的,那么您可以使用os。系统模块。调用它相当简单和容易:
import os
os.system("your command here")
# or
os.system('sh file.sh')
该命令将运行脚本一次,直到完成,然后阻塞直到退出。
有一些方法使用os.popen()(已弃用)或整个子进程模块,但这种方法
import os
os.system(command)
是最简单的方法之一。
子流程模块将帮助您解决这个问题。
显而易见的小例子:
>>> import subprocess
>>> subprocess.call(['sh', './test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
其中test.sh是一个简单的shell脚本,0是这次运行的返回值。
我正在运行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子流程
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 查看PS命令的全部输出
- 使用try和。Python中的if