【问题标题】:CalledProcessError: Command '('grep', 'route')' returned non-zero exit status 1CalledProcessError:命令'('grep','route')'返回非零退出状态1
【发布时间】:2018-01-23 09:27:55
【问题描述】:

Python3
OSX 10.13.2

我正在尝试制作FACEBOOK_WHITELIST,以便在收听webhook时防止来自互联网的恶意攻击
我正在获取 IP 地址。命令非常简单,只有whoispipegrep

问题:

def test():
    import subprocess
    ps = subprocess.Popen(
        ["whois", "-h", "whois.radb.net", "--", "'-i origin AS32934'"],
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT
    )
    output = subprocess.check_output(('grep', 'route'), stdin=ps.stdout)
    ps.wait()

引用:

---------------------------------------------------------------------------
CalledProcessError                        Traceback (most recent call last)
<ipython-input-28-8d5c434d09bd> in <module>()
      5     stderr=subprocess.STDOUT
      6 )
----> 7 output = subprocess.check_output(('grep', 'route'), stdin=ps.stdout)
      8 ps.wait()

~/.pyenv/versions/3.6.4/lib/python3.6/subprocess.py in check_output(timeout, *popenargs, **kwargs)
    334
    335     return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
--> 336                **kwargs).stdout
    337
    338

~/.pyenv/versions/3.6.4/lib/python3.6/subprocess.py in run(input, timeout, check, *popenargs, **kwargs)
    416         if check and retcode:
    417             raise CalledProcessError(retcode, process.args,
--> 418                                      output=stdout, stderr=stderr)
    419     return CompletedProcess(process.args, retcode, stdout, stderr)
    420

CalledProcessError: Command '('grep', 'route')' returned non-zero exit status 1.

然后我尝试了更小的函数调用。他们都不是工作。 第一个是单引号中的单个字符串

In [46]: ps = subprocess.Popen(["whois", "-h", "whois.radb.net", "--", "'-i origin AS32934'"])
    ...:
    ...:

In [47]: %  No entries found for the selected source(s).

第二个是将字符串拆分成多个双引号字符串

In [48]: ps = subprocess.Popen(["whois", "-h", "whois.radb.net", "--", "'-i", "origin", "AS32934'"])

In [49]: %  No entries found for the selected source(s).
%  No entries found for the selected source(s).
%  No entries found for the selected source(s).

我哪里错了?

更新:
@Jean-François Fabre

In [49]: ps = subprocess.Popen(["whois", "-h", "whois.radb.net", "--", "-i", "origin", "AS32934"])

In [50]: %% Attribute name after "-i" is invalid or unsupported.


%  No entries found for the selected source(s).
aut-num:    AS32934
as-name:    Facebook
descr:      Facebook
member-of:  AS-FACEBOOK
import:     from AS-ANY   accept ANY AND NOT {0.0.0.0/0}
export:     to AS-ANY   announce AS-FACEBOOK AND NOT {0.0.0.0/0}
admin-c:    FBNetEng
tech-c:     FBNetEng
notify:     noc@fb.com
mnt-by:     MAINT-AS32934
changed:    vvasilev@fb.com 20170627  #21:09:05Z
source:     RADB

参考资料:
CallProcessError
pipe grep

【问题讨论】:

    标签: python linux bash


    【解决方案1】:
    ps = subprocess.Popen(["whois", "-h", "whois.radb.net", "--", "'-i origin AS32934'"])# Wrong
    

    您尝试引用最后一个 agument 与 Popen 所做的引用是多余的。我无法测试,但您必须删除您添加的额外引号:

    ps = subprocess.Popen(["whois", "-h", "whois.radb.net", "--", "-i origin AS32934"])
    

    Popen 检测到参数中有空格并在需要时自动将其引用。添加更多引号会使Popen 添加更多引号,并且您的命令的参数是错误的。

    除非您需要单独传递每个参数,但您这样做的尝试也失败了,因为您在第一个和最后一个参数中留下了引号。这并没有削减它:

    ps = subprocess.Popen(["whois", "-h", "whois.radb.net", "--", "'-i", "origin", "AS32934'"]# Wrong
    

    应该是

    ps = subprocess.Popen(["whois", "-h", "whois.radb.net", "--", "-i", "origin", "AS32934"]
    

    【讨论】:

    • 它带有%% Attribute name after "-i" is invalid or unsupported. 但它有输出列表。有什么想法吗?
    • 当我把它和 full program import subprocess ps = subprocess.Popen( ["whois", "-h", "whois.radb.net", "--", "-i origin AS32934"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT ) output = subprocess.check_output(('grep', 'route'), stdin=ps.stdout) ps.wait() 非常感谢很多:+1
    猜你喜欢
    • 2021-01-11
    • 2019-10-02
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2019-08-12
    • 2021-02-15
    • 1970-01-01
    • 2014-04-09
    相关资源
    最近更新 更多