我试图获得
的输出dmesg | grep -i 'bios'
我试过这个:
dmsg = subprocess.check_output("dmesg | grep -i 'bios'").decode('utf-8')
,但我收到了错误。
如何获取完整的sdtoutput
消息?
答案 0 :(得分:3)
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)
答案 1 :(得分:2)
你可以使用Popen
管道将一个进程的stdout传递给另一个进程的stdin,但你也用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')