次のような多くの印刷ステートメントを含む生の電子メールをエンコードするためのレガシーコードがたくさんあります。
print >>f, "Content-Type: text/plain"
これはすべてメールに適していますが、現在は同じコードを使用してHTTPリクエストを出力しています。'\n'問題は、HTTPがを必要とするのにPythonのprintステートメントが出力されることです'\r\n'。
Python(少なくとも2.6.4)は、次のようにPRINT_NEWLINE実装されたprintステートメントの末尾のバイトコードを生成するようです。
ceval.c:1582: err = PyFile_WriteString("\n", w);
したがって、印刷のデフォルトの改行動作をオーバーライドする簡単な方法はないようです。私は次の解決策を検討しました
.replace('\n', '\r\n')ます。これは、マルチパートエンコーディングを使用するHTTPメッセージに干渉します。.write宛先ファイルオブジェクトのラッパーを作成し、メソッドをプロキシしますdef write(self, data):
if data == '\n':
data = '\r\n'
return self._file.write(data)
print >>f, textされる正規表現を記述します。f.write(text + line_end)line_end'\n''\r\n'3番目のオプションが最も適切だと思います。問題に対するPythonicのアプローチがどうなるかを聞くのは興味深いでしょう。