gpt4 book ai didi

python - sys.stdin 在 ctrl-d 上不关闭

转载 作者:IT王子 更新时间:2023-10-29 01:06:10 27 4
gpt4 key购买 nike

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

from sys import stdin
for line in stdin:
print line

我运行,输入行,然后按Ctrl+D,但程序没有退出。

这确实有效:

$ printf "echo" | python program.py 

为什么当我按下Ctrl+d时程序没有退出?我正在使用 Fedora 18 终端。

最佳答案

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

此外,还有缓冲问题 --- 三个级别!

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

  • 默认情况下,C 级标准输入文件有一个行缓冲区。

  • 终端本身 (!) 在其默认模式(“cooked 模式”)下,在将数据发送到进程之前读取一行数据,这解释了为什么键入 Ctrl+< kbd>D 在行中间输入时没有任何效果。

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

import sys

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

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

关于python - sys.stdin 在 ctrl-d 上不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15666923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com