如何将bash命令的输出放到Python变量中?如何将bash命令的输出放到Python变量中?
我写一个Python脚本,我想进入 bash命令的输出: rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} %{VENDOR}\n' | grep -v 'Red Hat'|wc -l
,并将它放置在Python变量,让说R
。
之后,我想要做的,Python if R != 0
然后运行一些Linux命令。 我该如何做到这一点?
如何将bash命令的输出放到Python变量中?如何将bash命令的输出放到Python变量中?
我写一个Python脚本,我想进入 bash命令的输出: rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} %{VENDOR}\n' | grep -v 'Red Hat'|wc -l
,并将它放置在Python变量,让说R
。
之后,我想要做的,Python if R != 0
然后运行一些Linux命令。 我该如何做到这一点?
有多种方案,但最简单的可能使用subprocess.check_output()
与shell=True
虽然这可能是安全隐患,如果你不完全控制哪些命令被传入。
import subprocess
var = subprocess.check_output('rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} %{VENDOR}\n' | grep -v 'Red Hat'|wc -l', shell = True)
var = int(var)
您需要使用shell=True
作为否则管道将不会被解释。
如果您需要更多的控制,你可能想看看plumbum
在这里你可以这样做:
from plumbum.cmd import rpm, grep, wc
chain = rpm["-qa", "--qf", r"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} %{VENDOR}\n"] | grep["-v", "Red Hat"] | wc["-l"]
R = int(chain())
虽然我可能不会援引wc
得到全部输出和计数其蟒蛇内长度(以便于检查你得到的只是你期望的行数,通过wc -l
排除所有细节)
我会推荐envoy
,主要是因为API对于90%的用例来说更直观。
r = envoy.run('ls ', data='data to pipe in', timeout=2)
print r.status_code # returns status code
print r.std_out # returns the output.
查看Envoy Github页面了解更多详情。
你可以使用stdin。
#!/usr/bin/python
import sys
s = sys.stdin.read()
print s
然后,你将用popen运行bash命令这样
echo "Hello" | ./myscript.py
输出
Hello
from subprocess import PIPE,Popen
p1 = Popen(["rpm", "-qa", "--qf", '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} %{VENDOR}\n'],stdout=PIPE)
p2 = Popen(["grep", "-v", 'Red Hat'],stdin=p1.stdout,stdout=PIPE)
p1.stdout.close()
p3 = Popen(["wc", "-l"],stdin=p2.stdout,stdout=PIPE)
p2.stdout.close()
out,err = p3.communicate()
如果你只是想检查如果grep返回任何匹配,那么f orget的厕所 - 1,只是检查什么的grep回报:
p1 = Popen(["rpm", "-qa", "--qf", '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} %{VENDOR}\n'],stdout=PIPE)
p2 = Popen(["grep", "-v", 'Red Hat'],stdin=p1.stdout,stdout=PIPE)
p1.stdout.close()
out,err = p2.communicate()
if out:
...
或者只是使用check_output
运行rpm
命令和检查"Red Hat"
字符串:
out = check_output(["rpm", "-qa", "--qf", '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} %{VENDOR}\n'])
if "Red Hat" not in out:
....
这是相同的反向搜索与grep -v
然后检查是否有任何与wc匹配。
你真的需要通过一个python脚本。也许只有bash足够。你的问题不是很清楚,你可以添加一些关于你的python脚本的更多细节。 –