1

我是 python 新手,如果我的要求看起来很奇怪,我很抱歉。我想在标准输入上循环每一行并立即将修改后的行返回到标准输出。我的代码大部分都可以工作。但是我不知道如何完全完成这项工作。

我有以下代码

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

    if not line:
        break

    sys.stdout.write(line)

当以交互方式使用时,如果在新行上有一个 EOF,它将退出,但是如果在我输入 Control-D 之前有文本,我必须在它退出行之前给代码两次,然后在循环退出之前再给一次.

我该如何解决。

4

2 回答 2

3

我认为我在这里的回答可以立即复制:

它与^D真的有关:它只是停止当前 read(2)调用。

如果程序这样做int rdbytes = read(fd, buffer, sizeof buffer); 并且您在两者之间按下^Dread()则返回缓冲区中当前读取的字节,并返回它们的编号。线路终止时也会发生同样的情况;最后\n总是交付。

因此,只有^D在一行的开头或另一行之后^D才具有read()return的预期效果0,表示 EOF。

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

于 2012-04-10T14:49:21.490 回答
1

python 文档中建议的策略是:

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

请参阅IO 教程

于 2012-04-10T13:33:25.610 回答