for sys.stdin中的行不返回任何值

时间:2015-10-18 16:49:36

标签: python macos python-2.7

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

import sys

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

我正在使用os x el capitan处理mac。我有Python 2.7.10

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

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

请帮我理解这个问题。

由于 Image of the terminal

1 个答案:

答案 0 :(得分:1)

你的代码试图从stdin读取,这意味着你需要至少pipe到stdin的东西,在这里我稍微更改了你的代码并在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实际上利用了stdin / stdout,因此您可以使用任何语言编写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)