我正在尝试使用python从标准输入中读取大量的行。
more hugefile.txt | python readstdin.py
问题是,只要我读了一行,程序就会冻结。
print sys.stdin.read(8)
exit(1)
这打印前8个字节,但我希望它终止,但它永远不会。我认为这不仅仅是读取第一个字节,而是尝试将整个文件读入内存。
与sys.stdin.readline()
相同的问题我真正想做的当然是阅读所有的行,但是有一个缓冲区,所以我不会耗尽内存。
我正在使用python 2.6
答案 0 :(得分:11)
这应该在现代Python中有效:
import sys
for line in sys.stdin:
# do something...
print line,
然后您可以像这样运行脚本:
python readstdin.py < hugefile.txt
答案 1 :(得分:2)
Back in the day, you had to use xreadlines
to get efficient huge line-at-a-time IO - 文档现在要求您使用for line in file
。
当然,只有当你实际上一次在线上工作时,这才有帮助。如果您只是阅读大二进制blob以传递给其他东西,那么您的其他机制可能同样有效。