2011-07-04 1 views
1

Windows上でsvndumpfilter2を実行すると、ダンプファイルにCRLFエンディングがあることが原因で発生するような問題が発生します。Python:Windows上のsvndumpfilter2と改行文字

SVNデータベースの一部のファイルには、CRLFの行末があります。しかし、PythonはCRLFを1文字としてカウントしているように見えます(CR文字をファイルの内容の中の次のLFとは別に数えません)。したがって、正しい文字数の読み込みに失敗し、次の塊の開始を逃します。

私の質問は、PythonにCRLFを2つの別個の文字として扱うように指示する方法です。

ストリームはsys.stdinから読み込まれるので、stdinの改行プロパティを変更する方法を探しています。 Pythonでこれを行うための「正しい方法」は何ですか?

答えて

3

更新:私に起こる1つの方法は、明示的にstdinのモードをバイナリに設定することです。だから、次のようなものは、2つの文字としてCRLFを読み込みます:

import msvcrt, os, sys 

msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) 
while True: 
    ch = sys.stdin.read(1) 
    print ord(ch) # CRLF should appear as 13 followed by 10 

別の方法を-uバッファなしstdinになりフラグ(だけでなく、stdoutstderr)でのpythonを開始することです。だからpython -u myscript.pyここでmyscript.pyはstdin.read(1)と他の変更はありません。詳細は、python --helpを参照してください。旧

:あなたは窓にしている場合はは、Pythonはあなたがsys.stdin.readlineを(または単にオブジェクトのようなファイルであるsys.stdinを反復)を呼び出したときに任意の介入なしにこれを処理することができるはずです。代わりにsys.stdin.readを使用していますか?もしそうなら、あなたは自分でその事件を処理する必要があります。

+0

これは問題です。CRLFを1文字だけと見なす 'sys.stdin.read'があります。私の質問は次のようになります。 – glmxndr

+0

@subtenante:申し訳ありません、私はあなたの質問を以前に誤解しました。私は希望を助けるアップデートを加えました。 – ars

+0

実際、これはもっと役立ちます! :) どうもありがとう。 – glmxndr