subprocess.check_输出()、zgrep和match limi

2024-09-28 22:24:59 发布

您现在位置:Python中文网/ 问答频道 /正文

上下文:我试图找到python包的github存储库。为此,我是github url的zgrep'ping包存档。在我将输出限制为1个结果之前,它工作正常:

# works, returns a lot of results
subprocess.check_output(["zgrep", "-oha", "github", 'Django-1.10.1.tgz'])  #  works, a lot of results
# add -m1 to limit output, returns status 2 (doesn't work)
subprocess.check_output(["zgrep", "-m1", "-oha", "github", 'Django-1.10.1.tgz'])  #  works, a lot of results
# same command, different file - works
subprocess.check_output(["zgrep", "-m1", "-oha", "github", 'grabber.py'])

从命令行来看,这三个命令都可以正常工作。有什么想法吗?在

回溯:

^{pr2}$

命令行:

$ zgrep -m1 -oha "github.com/[^/]\+/django" pkgs/Django-1.10.1.tar.gz
github.com/django/django

Tags: ofdjangogithuboutputcheckresultsreturnslot
1条回答
网友
1楼 · 发布于 2024-09-28 22:24:59

所以,原因是:zgrep是一个shell脚本,它只需通过gzip和egrep管道传输归档文件。如果我们限制结果的数量,那么egrep会终止管道,因此gzip退出并抱怨。在控制台中,我们永远看不到它,但子进程以某种方式捕捉到这个信号并引发异常。在

解决方案:编写不抱怨的zgrep的迷你版

gunzip < $FILE 2> /dev/null | egrep -m1 -ohia $PATTERN

相关问题 更多 >