python:argparse上的标准管道不工作

python:argparse上的标准管道不工作,python,pipe,stdout,stdin,argparse,Python,Pipe,Stdout,Stdin,Argparse,这是我同事编写的代码片段。这段代码是为了在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

这是我同事编写的代码片段。这段代码是为了在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)
既然我在用管道输送,它应该能工作。但是我得到了这个错误,它无法识别参数。(如果我们使用命令行运行该函数,则该函数工作正常)

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


由于不设置stdin,子进程将从其父进程继承stdin。如果父进程的stdin连接到终端,则子进程的stdin也连接到终端。通过将子进程的stdin设置为
subprocess.NONE
,禁用子进程的stdin

更好的是,将address设置为可选参数。并检查address参数的值,而不是stdin是什么

例如

usage: nomadly-cli-geocode [-h] [-o {parse,json,human}] [-u]
nomadly-cli-geocode: error: unrecognized arguments: Sydney   
opt.add_argument("--address", "-a", nargs="*") 

... 

if not args.address:
    # try to get address from stdin