You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.5.2下tail+mitmdump命令报错,ping正常的解决方法

解决tail + mitmdump管道命令执行报错的问题

首先看你的错误提示:tail: invalid number of lines: ‘r’,这说明tail把mitmdump的参数当成了自己的命令行参数,根本原因是:

你用了带管道|的shell命令,但shelljob的proc.Group.run()方法默认不会通过系统shell来解析命令,而是直接把整个命令字符串按空格拆分成参数列表。这样一来,管道符号|和后面的mitmdump、-n、-r等都会被当成tail的参数,tail看到-n(mitmdump的参数)时,会误以为是自己的-n(指定行数)参数,然后把后面的-r当成行数数值,自然就报错了。

而ping 127.0.0.1能正常运行,是因为这个命令没有管道或特殊shell语法,直接拆分参数就能正确执行。

解决方法

只需要在调用run()时加上shell=True参数,让shell来解析整个命令(包括管道):

from shelljob import proc
g = proc.Group()
command = "tail -f -c +0 output_file | mitmdump -n -r - --set flow_detail=1 --showhost"
# 加上shell=True,让系统shell处理管道逻辑
p = g.run(command, shell=True)
def read_process():
    while g.is_pending():
        lines = g.readlines()
        for proc, line in lines:
            print ("data:" + str(line) + '\n\n')

额外验证

你可以先在终端直接执行这条命令:

tail -f -c +0 output_file | mitmdump -n -r - --set flow_detail=1 --showhost

如果终端里能正常运行,那加上shell=True后Python代码就能正常工作了。

内容的提问来源于stack exchange,提问作者jebret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:40:45