切换到argparse(它也是标准库的一部分)并使用
argparse.FileType,默认值为标准输入:
import argparse, sys
p = argparse.ArgumentParser()
p.add_argument('input', nargs='?',
type=argparse.FileType(), default=sys.stdin)
args = p.parse_args()
print(args.input.readlines())
这不会让你为标准输入指定编码和其他参数,
然而;如果你想这样做,你需要使参数非可选
并让FileType 在- 作为
论据:
p.add_argument('input', type=FileType(encoding='UTF-8'))
注意后一种情况不会支持二进制模式 ('b') I/O。如果
你只需要,你可以使用上面的默认参数技术,但是
提取二进制 I/O 对象,例如,default=sys.stdout.buffer for
标准输出。但是,如果用户无论如何指定-,这仍然会中断。
(- stdin/stdout 总是包裹在 TextIOWrapper 中。)
如果您希望它与 - 一起使用,或者您需要任何其他参数
在打开文件时提供,如果它被包装,您可以修复参数
错误:
p.add_argument('output', type=argparse.FileType('wb'))
args = p.parse_args()
if hasattr(args.output, 'buffer'):
# If the argument was '-', FileType('wb') ignores the 'b' when
# wrapping stdout. Fix that by grabbing the underlying binary writer.
args.output = args.output.buffer
(帽子提示medhat
提到add_argument()的type参数。)