【发布时间】:2018-07-03 07:14:38
【问题描述】:
我的子进程命令有问题,我想找出与“在线”行匹配的行。
def run_command(command):
p = subprocess.Popen(command,shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
return iter(p.stdout.readline, b'')
command = 'mosquitto_sub -u example -P example -t ITT/# -v | grep "Online" '.split()
for line in run_command(command):
print(line)
但我会得到一个错误
Error: Unknown option '|'.
Use 'mosquitto_sub --help' to see usage.
但是当使用 linux shell 运行时
user@server64:~/Pythoniscriptid$ mosquitto_sub -u example -P example -t ITT/# -v | grep "Online"
ITT/C5/link Online
ITT/IoT/tester55/link Online
ITT/ESP32/TEST/link Online
我也尝试了shell = True,但没有成功,因为我会得到另一个错误,即无法识别主题ITT/#
Error: You must specify a topic to subscribe to.
Use 'mosquitto_sub --help' to see usage.
“可能的重复”根本没有帮助我,所以我认为我遇到了不同的问题。我试图将代码更改为此,没有得到任何回报
def run_command(command,command2):
p1 = subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
p2 = subprocess.Popen(command2,stdin=p1.stdout,stdout=subprocess.PIPE)
return iter(p2.stdout.readline,'')
command = 'mosquitto_sub -u example -P example -t ITT/# -v'.split()
command2 = 'grep Online'.split()
#subprocess.getoutput(command)
for line in run_command(command,command2):
print(line)
【问题讨论】:
-
尝试将
executable="/bin/bash"添加到Popen。 -
@Maroun 出现错误 /usr/bin/test:/usr/bin/test: 二进制无法启动
-
@joppich 我认为他有一个不同的问题
-
我需要使用这个函数,因为我的输出字符串很长
标签: python grep subprocess