1
import os
s = os.sys.stdin.buffer.read(1024*32)

で失敗しました

D:\Projects\pytools>python t1.py
Traceback (most recent call last):
  File "t1.py", line 2, in <module>
    s = os.sys.stdin.buffer.read(1024*32)
OSError: [Errno 12] Not enough space

buf buflen = 1024*32-1 が与えられた場合、右に進みます

import os
s = os.sys.stdin.buffer.read(1024*32-1)

python t1.py を実行すると、プロセスがブロックされ、期待どおりに入力を待機します。なぜpython3.3には1024*32-1のバッファ長制限があるのですか? それはシステムが異なるのですか、それともすべてのシステムで同じですか? どうすればこの制限を取り除くことができますか?

ところで:私はWindows 7 python 32ビットバージョン3.3を使用しています

4

1 に答える 1

0

osまず、 module hereのソースを確認します。26 行目は、
import sys, errno
これが標準モジュールos.sysへの単なる参照であることを示しています。 次に、モジュールのソースに 向かいます。行 1593 に次のコメントがあります (ありがたいことに誰かがそこに書いてくれました...) 。 1091 行目: 次に、910 行目にある関数の定義を探します。999 行目にあるこの関数の戻り値を探します。次のようになり ます。関数の戻り値ですsys
sys
/* stdin/stdout/stderr are now set by pythonrun.c */
pythonrun.c
std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);

PySys_SetObject("stdin", std);
create_stdio()
return stream;
stream_PyObject_CallMethodId()984 行で呼び出されます。

流れがわかるといいのですが、ここからたどってみてください。

于 2013-04-24T21:07:03.887 に答える