首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >subprocess.check_output()、zgrep和匹配限制

subprocess.check_output()、zgrep和匹配限制
EN

Stack Overflow用户
提问于 2016-09-29 17:58:51
回答 1查看 325关注 0票数 0

上下文:我正在尝试找到python包的github存储库。为此,我是用于github urls的zgrep‘’ping包存档。它可以正常工作,直到我将输出限制为1:

代码语言:javascript
复制
# 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'])

在命令行中,这三个命令都正常工作。有什么想法吗?

回溯:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 574, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['zgrep', '-m1', '-oha', 'github', 'pkgs/Django-1.10.1.tar.gz']' returned non-zero exit status 2

命令行:

代码语言:javascript
复制
$ zgrep -m1 -oha "github.com/[^/]\+/django" pkgs/Django-1.10.1.tar.gz
github.com/django/django
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-29 19:59:21

因此,原因是: zgrep是一个shell脚本,它简单地通过gzip和egrep传输归档文件。如果我们限制结果的数量,egrep将终止管道,因此gzip退出并抱怨。在控制台中,我们从未见过它,但是子进程以某种方式捕捉到这个信号并引发异常。

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

代码语言:javascript
复制
gunzip < $FILE 2> /dev/null | egrep -m1 -ohia $PATTERN
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39777039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档