argparse 文档显示了一种默认为 stdin/stdout 的文件参数的方法,文本编码默认为 utf- 8
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
... default=sys.stdin)
>>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
... default=sys.stdout)
>>> parser.parse_args([])
Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>,
outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>)
但是,在此 OS X (10.7.5) 系统上,此代码<stdin> <stdout>
使用 ascii 编解码器产生。例如,如果我的输出流包含中文或斯堪的纳维亚字符,它们将在终端上正常显示,但如果我将标准输出重定向到文件,则会触发 ascii 编解码器错误。有没有人找到绕过这个的路线?
(直接从 Python 代码编写 utf-8 文件不是问题——我正在使用codecs.open(str_path, "w", 'UTF-8')
)