![](/img/trans.png)
[英]How to call a python script on a new shell window from python code?
[英]How to call a shell script from python code?
如何从 python 代码调用 shell 脚本?
子流程模块将帮助您。
公然琐碎的例子:
>>> import subprocess
>>> subprocess.call(['sh', './test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
其中test.sh
是一个简单的 shell 脚本, 0
是这次运行的返回值。
如果您想将一些参数传递给您的 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
import os
import sys
假设 test.sh 是您想要执行的 shell 脚本
os.system("sh test.sh")
使用上面提到的子流程模块。
我像这样使用它:
subprocess.call(["notepad"])
我正在运行 python 3.5 并且 subprocess.call(['./test.sh']) 对我不起作用。
我给你三个解决方案取决于你想用输出做什么。
1 - 调用脚本。 您将在终端中看到输出。 输出是一个数字。
import subprocess
output = subprocess.call(['test.sh'])
2 - 调用并将执行和错误转储到字符串中。 除非您打印(标准输出),否则您不会在终端中看到执行。 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 子流程
我知道这是一个老问题,但我最近偶然发现了这个问题,它最终误导了我,因为Subprocess API 自 python 3.5 以来发生了变化。
执行外部脚本的新方法是使用run
函数,它运行 args 描述的命令。 等待命令完成,然后返回 CompletedProcess 实例。
import subprocess
subprocess.run(['./test.sh'])
如果脚本有多个参数
#!/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"
Subprocess 很好,但有些人可能更喜欢scriptine 。 Scriptine 有更高级的方法集,如shell.call(args) 、 path.rename(new_name)和path.move(src,dst) 。 Scriptine 基于子进程和其他进程。
脚本的两个缺点:
如果您的 shell 脚本文件没有执行权限,请按以下方式执行。
import subprocess
subprocess.run(['/bin/bash', './test.sh'])
为了在 python 脚本中运行 shell 脚本并从 ubuntu 中的特定路径运行它,请使用以下内容;
import subprocess
a= subprocess.call(['./dnstest.sh'], cwd = "/home/test")
print(a)
CWD 当前工作目录在哪里
以下在 Ubuntu 中不起作用; 这里我们需要删除'sh'
subprocess.call(['sh' ,'./dnstest.sh'], cwd = "/home/test")
使用@Manoj-Govindan 的回答,我发现我可以从 python 运行简单的 shell 脚本,但是我拼命尝试运行的脚本会失败并出现错误
Syntax error: "(" unexpected
我将第一个参数从“sh”更改为“bash”,然后是 viola。 突然执行了。
subprocess.call(['bash', './test.sh'])
请尝试以下代码:
Import Execute
Execute("zbx_control.sh")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.