Python:从stdin读取大量行

Python:从stdin读取大量行,python,stdin,readline,Python,Stdin,Readline,我试图用python从标准输入中读取大量行 more hugefile.txt | python readstdin.py 问题是,只要我读了一行,程序就会冻结 print sys.stdin.read(8) exit(1) 这会打印前8个字节,但我希望它会终止,但它永远不会终止。我认为这不仅仅是读取第一个字节,而是试图将整个文件读入内存 sys.stdin.readline()也有同样的问题 我真正想做的当然是读取所有的行,但是有一个缓冲区,这样我就不会耗尽内存 我正在使用Python2.

我试图用python从标准输入中读取大量行

more hugefile.txt | python readstdin.py
问题是,只要我读了一行,程序就会冻结

print sys.stdin.read(8)
exit(1)
这会打印前8个字节,但我希望它会终止,但它永远不会终止。我认为这不仅仅是读取第一个字节,而是试图将整个文件读入内存

sys.stdin.readline()也有同样的问题

我真正想做的当然是读取所有的行,但是有一个缓冲区,这样我就不会耗尽内存

我正在使用Python2.6,文档现在要求您对文件中的行使用


当然,这只有在你一次一条线路的情况下才有帮助。如果您只是读取大的二进制blob来传递给其他对象,那么您的其他机制可能也同样有效。

这在现代Python中应该可以有效地工作:

import sys

for line in sys.stdin:
    # do something...
    print line,
然后可以按如下方式运行脚本:

python readstdin.py < hugefile.txt
python readstdin.py
为什么您要使用更多而不是cat,甚至只是简单地重定向stdin?我看不出您的程序会“冻结”的任何原因。你是如何检测到它冻结的?啊,我是从windows命令行运行它的。windows上没有cat。我的想法与Mark相同,但后来发现当stdout被重定向时,
more
看起来就像
cat
。不过,
cat
绝对是一个更好的选择。(我相信这是Windows上的
类型
,或者类似的东西)为什么选择不使用重定向?即使在Windows上也不需要使用
类型
。这里的记忆是如何工作的?它一次加载一行,并在下一行读入时将其从缓冲区中删除?感谢,一次读取一行并将其设置为line变量。行的旧值将在丢失时被回收。