python:argparse上的标准管道不工作
这是我同事编写的代码片段。这段代码是为了在python中创建一个参数解析器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
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