数据到达时只有管道

时间:2017-02-24 21:13:55

标签: python linux pipe

我试图在Linux上学习简单的管道工具:

sender.py:

# sender.py
import random
import sys
import time

while True:
    r = random.randrange(5)
    print(r)
    sys.stdout.flush()
    time.sleep(1)

receiver.py:

# receiver.py
import sys

while True:
    line = sys.stdin.readline()
    print("hello " + line.strip() + " hello")
    sys.stdout.flush()

当我这样做时:

$ python sender.py | python receiver.py

我按预期输出以下内容:

hello 3 hello
hello 2 hello
hello 2 hello
hello 0 hello
...
^C

到现在为止,一切都按照我的预期运作。问题部分如下。当我尝试做的时候:

$ echo "50" | python receiver.py

我期望得到的输出是:

hello 50 hello

然而,相反,我有以下几行无限次出现:

hello  hello

我的问题:

  1. 发生了什么事?什么是背后的逻辑" echo" 50" | python receiver.py" ?
  2. 有没有办法更改我的 receiver.py ,以便只打印hello 50 hello一次?

2 个答案:

答案 0 :(得分:1)

当只提供一个输入时,您正无限期地读取输入。当没有收到任何内容时,你需要制作你的脚本2^2^3 == (1^1^1)(0^0^1) == 11 == 3 i.e. 10 (2) 10 (2) 11 (3) -------- 11 (3) ======== 5^7^5 == (1^1^1)(0^1^0)(1^1^1) == 111 101 (5) 111 (7) 101 (5) --------- 111 (7) =========

break

答案 1 :(得分:1)

来自the documentation

  

...如果f.readline()返回一个空字符串,则已到达文件末尾...

将您的代码更改为:

import sys

while True:
    line = sys.stdin.readline()
    if not len(line):
        break
    print("hello " + line.strip() + " hello")
    sys.stdout.flush()