【问题标题】:for line in sys.stdin does not return any value [duplicate]sys.stdin 中的 for 行不返回任何值 [重复]
【发布时间】:2016-01-16 23:34:49
【问题描述】:

我有一个简单的python程序如下:

import sys

for line in sys.stdin.readlines():
    print (line)

我正在使用 os x el capitan 开发 Mac。我有 Python 2.7.10

当我在终端上的程序上运行它时,它挂起。它不打印该行。

下图描述了该问题。该命令已在终端中运行超过 5 分钟,但没有输出

请帮助我理解这个问题。

谢谢

【问题讨论】:

  • 命令行参数 != STDIN.

标签: python macos python-2.7


【解决方案1】:

您的代码正在尝试从标准输入读取,这意味着您至少需要在标准输入中输入pipe 的内容,这里我稍微更改了您的代码并以script.py 命名:

import sys
for line in sys.stdin.readlines():
    print (line,1)

这是shell中的输出:

$printf "hello\nworld\n" | python script.py
('hello\n', 1)
('world\n', 1)

stdin、stdout 和 err 通常是 unix 中的三个重要概念,我建议您阅读more 了解它。例如,Hadoop Streaming 实际上利用了标准输入/标准输出,因此您可以使用任何语言编写 map reduce 作业并轻松地将不同的组件连接在一起。

以下是一些示例,说明如果您有文件,如何让您的代码正常工作。

$ printf "hello\nworld\n" > text
$ cat text
hello
world
$ cat text | python script.py 
('hello\n', 1)
('world\n', 1)
$ python script.py < text
('hello\n', 1)
('world\n', 1)

【讨论】:

  • 谢谢。那行得通,但这是我第一次以这种方式使用它。在它使用没有管道的标准输入之前。令人惊讶!
猜你喜欢
  • 2021-04-11
  • 2022-08-16
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多