1
我試圖讓的Python subprocess.check_output,與管道
dmesg | grep -i 'bios'
輸出我已經試過這樣:
dmsg = subprocess.check_output("dmesg | grep -i 'bios'").decode('utf-8')
,但我發現了一個錯誤。
如何獲取完整的sdtoutput
消息?
我試圖讓的Python subprocess.check_output,與管道
dmesg | grep -i 'bios'
輸出我已經試過這樣:
dmsg = subprocess.check_output("dmesg | grep -i 'bios'").decode('utf-8')
,但我發現了一個錯誤。
如何獲取完整的sdtoutput
消息?
import subprocess
p1 = subprocess.Popen(['dmesg'], stdout=subprocess.PIPE)
p2 = subprocess.Popen(['grep', '-i', 'bios'], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
out, err = p2.communicate()
print(out)
可以通過管道使用Popen
路過一個人一個過程的標準輸出到另一個標準輸入,但你也解析與Python dmesg的,而不是運行兩個過程的輸出:
import subprocess
dmsg = subprocess.check_output("dmesg",universal_newlines=True).splitlines()
print([line for line in dmsg if "bios" in line.lower()])
如果你是試圖管道使用check_output你需要使用shell=True
:
import subprocess
dmsg = subprocess.check_output("dmesg | grep -i 'bios'",shell=True).decode('utf-8')
你收到了什麼錯誤?您通常必須將命令和參數作爲列表中的元素,而不是單個字符串。請參閱[文檔](https://docs.python.org/2/library/subprocess.html#subprocess.check_output) –
像這樣它只能使用'shell = True' – mata