Python版本3.5.2
所以我有来自mitmproxy
的{{1}}文件输出,我想用以下方式阅读:
enter code here
并返回
from shelljob import proc
g = proc.Group()
command = "tail -f -c +0 output_file | mitmdump -n -r - --set flow_detail=1 --showhost"
p = g.run (command)
def read_process():
while g.is_pending():
lines = g.readlines()
for proc, line in lines:
print ("data:" + str(line) + '\n\n')
但如果我将命令更改为data:b'tail: invalid number of lines: \xe2\x80\x98r\xe2\x80\x99\n'
,例如:
ping 127.0.0.1
它工作正常!返回:
from shelljob import proc
g = proc.Group()
command = "ping 127.0.0.1"
p = g.run (command)
def read_process():
while g.is_pending():
lines = g.readlines()
for proc, line in lines:
print ("data:" + str(line) + '\n\n')
那么解决方案是什么?
答案 0 :(得分:0)
数据以字节为单位返回,如输出中的b
所示。
你必须将它解码为一个字符串。
print ("data:" + line.decode('utf-8') + '\n\n')
答案 1 :(得分:0)
我非常确定您的命令不会像调用g.run
时所预期的那样被管道传输 - -n -r
之后的参数mitmdump
以某种方式传递给tail
因此运行:
$ tail -n -r
tail: invalid number of lines: ‘r’
生成您看到的错误消息。
现在您告诉我们g.run
实际上是什么,查看函数的documentation,我们可以看到它传递给Popen
的shell
参数,这是启用shell命令处理的参数。要解决此问题,您可以尝试以下方法:
p = g.run(command, shell=True)