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