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的缓冲区长度限制?它是系统不同,还是所有系统都一样?我们如何才能消除这种限制?
BTW:我使用的是Windows 7 python 32位版本3.3
答案 0 :(得分:0)
我们首先查看os
模块here的来源,其中第26行读取
import sys, errno
这告诉我们os.sys
只是对标准sys
模块的引用
然后我们前往sys
模块的source,在第1593行我们发现以下评论(谢天谢地有人把它放在那里......):
/* stdin/stdout/stderr are now set by pythonrun.c */
然后我们转到pythonrun.c
file,我们在第1086行遇到以下代码:
std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
这在第1091行:
PySys_SetObject("stdin", std);
然后我们查找在行910中找到的create_stdio()
函数的定义。我们在999行查找此函数的返回值,如下所示:
return stream;
现在我们必须找出stream
是什么。它是第984行中调用的函数_PyObject_CallMethodId()
的返回值。
我希望你看到流程 - 试着从这里开始。