Python-Readline控件-D非空行后不工作为什么?

Python-Readline控件-D非空行后不工作为什么?,python,Python,我是python新手,如果我的问题看起来很奇怪,我很抱歉。我想在标准输入的每一行上循环,并立即将修改后的行返回到标准输出。大多数情况下,我的代码都是有效的。然而,我不知道如何使这项工作完全 我有以下代码 while True: line = sys.stdin.readline() if not line: break sys.stdout.write(line) 当以交互方式使用时,如果新行上有EOF,这将退出,但是如果在键入Control-D之前

我是python新手,如果我的问题看起来很奇怪,我很抱歉。我想在标准输入的每一行上循环,并立即将修改后的行返回到标准输出。大多数情况下,我的代码都是有效的。然而,我不知道如何使这项工作完全

我有以下代码

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

    if not line:
        break

    sys.stdout.write(line)
当以交互方式使用时,如果新行上有EOF,这将退出,但是如果在键入Control-D之前有文本,我必须在代码退出行之前给出两次,然后在循环退出之前给出一次


如何解决此问题。

python文档中建议的策略是:

for line in sys.stdin:
    sys.stdout.write(line)

请参阅。

python文档中建议的策略是:

for line in sys.stdin:
    sys.stdout.write(line)
请参阅。

我想我的答案可以立即复制:

它与
^D
有关系:它只是停止电流
read(2)
call

如果程序执行
int rdbytes=read(fd、buffer、sizeof buffer)
然后按
^D
中间的
read()
返回当前读取的值 缓冲区中的字节,返回它们的编号。同样的情况也发生在网上 结束最后的
\n
始终是交付的

因此,只有一行开头或另一行后面的
^D
具有 使
read()
返回
0
,表示EOF的预期效果

当然,这种行为也会影响Python代码。

我认为我的答案可以立即复制:

它与
^D
有关系:它只是停止电流
read(2)
call

如果程序执行
int rdbytes=read(fd、buffer、sizeof buffer)
然后按
^D
中间的
read()
返回当前读取的值 缓冲区中的字节,返回它们的编号。同样的情况也发生在网上 结束最后的
\n
始终是交付的

因此,只有一行开头或另一行后面的
^D
具有 使
read()
返回
0
,表示EOF的预期效果


当然,这种行为也会影响Python代码。

您必须测试
line
的内容,以获得一个潜在的EOFDid—您实际运行代码了吗?我认为您应该在
处得到一个错误,而true:
。是的,我运行了我的代码。我不是那么爱发牢骚。Njzk2如何测试EOF?另外,在2个控制Ds之前,我不会中断读线。我如何解决这个问题。并且您没有得到
NameError:name'true'未定义
?这怎么可能?您必须测试
行的内容
以查找潜在的EOFDid您是否实际运行代码?我认为您应该在
处得到一个错误,而true:
。是的,我运行了我的代码。我不是那么爱发牢骚。Njzk2如何测试EOF?另外,在2个控制Ds之前,我不会中断读线。我如何解决这个问题。并且您没有得到
NameError:name'true'未定义
?这怎么可能?我没有说清楚,我希望输出是立即的。这是一个非常有趣的问题——你的代码是“正确的”,这只是一个获得交互性以提供正确输入的问题。我没有说清楚,我希望立即输出。这将一直等到输入的EOF被写入输出。这实际上是一个非常有趣的问题-你的代码是“正确的”,这只是一个让交互性为你提供正确输入的问题。直到我读了6遍才明白这一点。这解决了我的问题。谢谢。直到我读了6遍才明白这一点。这解决了我的问题。