sys.stdin不closuresctrl-d

我在program.py中有以下代码:

from sys import stdin for line in stdin: print line 

我运行,input行,然后按Ctrl + D ,但程序不会退出。

这工作:

 $ printf "echo" | python program.py 

为什么按Ctrl + d时程序不能退出? 我正在使用Fedora 18terminal。

Solutions Collecting From Web of "sys.stdin不closuresctrl-d"

Ctrl + D有一个奇怪的效果。 它不会关闭输入流,但只会导致C级fread()返回空结果。 对于普通文件来说,这样的结果意味着文件现在处于结束状态,但是读取更多内容是可以接受的,例如,检查是否有其他人在此期间向文件写入了更多数据。

另外,还有缓冲的问题—它们三个层次!

  • Python对文件的迭代确实阻塞了缓冲。 避免从交互式流中读取。

  • C级stdin文件默认具有行缓冲区。

  • 终端本身(!)在其默认模式(“熟练模式”)下读取一行数据,然后将其发送给进程,这就解释了为什么在键入Ctrl + D时没有任何效果线。

这个例子避免了第一个问题,如果你只是想要检测Ctrl + D类型为自己的行,

 import sys while True: line = sys.stdin.readline() print repr(line) 

除了当“行”来自Ctrl + D时 ,你会得到每一行的最后一个'\n' ,在这种情况下,你只会'' (但读继续,除非当然我们添加if line == '': break )。