2012-11-19 82 views
3

argparse documentation示出到文件參數默認爲標準輸入/輸出的方法,將具有文本編碼默認爲UTF-8UTF-8 STDIN + STDOUT與Python ArgParse上 「OS X」

>>> 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)系統,但是,此代碼使用ascii編解碼器生成<stdin> <stdout>。如果我的輸出流包含中文或斯堪的納維亞字符,它們將在終端上顯示正常,但如果我將stdout重定向到文件,則ascii編解碼器錯誤會被觸發。有沒有人發現這條路線?

(直接從Python代碼編寫UTF-8的文件是不是一個問題 - 我使用codecs.open(str_path, "w", 'UTF-8')

+0

應該提到我正在使用Python 2.7 – houthakker

回答

0

您正在閱讀的Python的3文檔。試試Python 2

此外,您的應用可能需要撥打setlocale()

+0

請不僅僅包含適當答案的鏈接。 – PearsonArtPhoto

+0

感謝您指向正確文檔的指針。試過setlocale()但我想知道這是否是正確的方向?本地日期/貨幣問題並沒有真正影響,而且我的UTF-8流通常包含各種語言的文本,與用戶區域設置無關。目標似乎是將編解碼器從ASCII默認設置爲UTF-8的更深層次的設置 – houthakker