【发布时间】:2018-08-18 10:12:21
【问题描述】:
我希望我的脚本接收这些互斥的输入选项:
- 包含 JSON (
script.py -i input.json) 的输入文件; - 包含 JSON (
script.py '{"a":1}') 的字符串; - 来自标准输入的 JSON(
echo '{"a":1}' | script.py或cat input.json | script.py)。
以及这些相互排斥的输出选项:
- 包含 JSON 的输出文件;
- 标准输出中的 JSON。
所以我尝试了这段代码
import json,sys,argparse
parser = argparse.ArgumentParser(description='Template for python script managing JSON as input/output format')
group = parser.add_mutually_exclusive_group()
group.add_argument('--input-file', '-i', type=str, help='Input file name containing a valid JSON.', default=sys.stdin)
group.add_argument('json', nargs='?', type=str, help='Input string containing a valid JSON.' , default=sys.stdin)
parser.add_argument('--output-file', '-o',type=str, help='Output file name.')
args = parser.parse_args()
if not sys.stdin.isatty():
data = sys.stdin.read()
else:
# args = parser.parse_args()
if args.input_file :
data=open(args.input_file).read()
elif args.json :
data=args.json
datain=json.loads(data)
dataout=json.dumps(datain, indent=2)
if args.output_file :
output_file=open(args.output_file, 'w')
output_file.write(dataout+'\n')
output_file.close()
else:
print (dataout)
但它不适用于标准输入,因为它至少需要两个 group 选项之一。
如何在输入选项列表中添加标准输入?
如果我这样称呼它,添加 default=sys.stdin 参数会起作用
echo '{}' | ./script.py -
但不是那样:
echo '{}' | ./script.py
【问题讨论】:
标签: python json python-3.x stdin argparse