【问题标题】:python: stdout PIPE on argparse not workingpython:argparse上的stdout PIPE不起作用
【发布时间】:2015-01-01 08:29:55
【问题描述】:

这是我同事编写的代码中的 sn-p。该代码用于出于某种目的在 python 中创建参数解析器。

if not sys.stdin.isatty():
    # Running in pipe mode
    pipe_mode = True
else:
    opts.add_argument('address', nargs='+')

如果我们通过管道传输标准输入,它不会读取它。这就是我想要做的:

subprocess.Popen(["nomadly-geocode", "-o", "json", values[1]],
                                                  stdout=subprocess.PIPE)

由于我是 PIPE-ing 标准输出,它应该可以工作。但是我在无法识别参数的情况下收到此错误。 (如果我们使用命令行来运行它,该功能就可以正常工作)

错误:(假设值[1] = 悉尼)

usage: nomadly-cli-geocode [-h] [-o {parse,json,human}] [-u]
nomadly-cli-geocode: error: unrecognized arguments: Sydney   

【问题讨论】:

    标签: python pipe stdout stdin argparse


    【解决方案1】:

    由于您没有设置标准输入,子进程从其父进程继承标准输入。如果父进程的标准输入连接到终端,那么子进程的标准输入也是如此。通过将其设置为subprocess.NONE 来禁用孩子的标准输入。

    更好的是,将地址设为可选参数。并检查地址参数的值,而不是标准输入。

    例如。

    opt.add_argument("--address", "-a", nargs="*") 
    
    ... 
    
    if not args.address:
        # try to get address from stdin 
    

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 2020-09-08
      • 2020-01-24
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多