如何將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腳本的更多細節。 –