【问题标题】:python cat (echo) equivalent for stdin标准输入的 python cat (echo) 等效项
【发布时间】:2012-06-10 18:47:41
【问题描述】:

我以为这个程序会逐行回显我的控制台输入:

import os, sys

for line in sys.stdin:
    print line

不幸的是,它等待 EOF (Ctrl + D) 然后产生输出。我应该如何修改我的程序以逐行获取输出?

【问题讨论】:

  • 你是在 Linux 下运行这个吗?什么版本的 Python?我无法在 Windows 7 下使用 Python 2.7.2 打破 ^C 或 ^D。
  • @Levon 在 Windows 下,EOF 字符是 Ctrl+Z,出于奇怪的历史原因。

标签: python echo stdin


【解决方案1】:

Python 2.x:

for line in iter(sys.stdin.readline, ''):
    print line,

Python 3.x:

for line in iter(sys.stdin.readline, ''):
    print(line, end='')

请参阅iter() 上的文档,其中包含两个参数,它实际上是从像这样的文件中读取的示例之一。

【讨论】:

    【解决方案2】:

    Python 2.x:

    while True:
      sys.stdout.write(sys.stdin.readline())
    

    Python 3.x:

    while True:
      print(sys.stdin.readline(), end = "")
    

    当您使用for line in file: 语法时,Python 会为您管理缓冲,这意味着您无法控制在开始执行循环之前将读取多少行。当您调用file.readline() 时,它会从文件中读取一行并执行一次循环。

    【讨论】:

    • 您的代码是正确的,但您肯定对for line in file: 语法有误。 Python 不会将整个文件读入内存;那将是file.read() 或file.readlines()。 for line in file: 创建一个迭代器,一次读取一行。在这种情况下,从标准输入读取,必须有某种缓冲继续导致这种行为。请注意,如果您执行for line in sys.stdin:,它会等到您输入 EOF(在 Linux 上为 Ctrl+D)然后回显;但它仍在等待,您可以输入更多文本和另一个 EOF,它将再次打印。
    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 2011-05-26
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2013-05-22
    相关资源
    最近更新 更多