各プロセスのパイプ接続は非同期で動作すると思っていましたが、そうではありません。
a.py
#!/usr/bin/env python
import sys
import time
for line in sys.stdin:
time.sleep(2)
sys.stdout.write(line.upper())
sys.stdout.flush()
と b.py
#!/usr/bin/env python
import sys
for line in sys.stdin:
sys.stdout.write(line.capitalize())
sys.stdout.flush()
およびtest.txt
hello
world
python
次のコードは、各行を 1 行ずつ 2 秒ずつ表示します。
$ ./a.py < test.txt
HELLO
WORLD
PYTHON
ただし、次のコードは完全に一度だけ表示されます。
$ ./a.py < test.txt | ./b.py
Hello
World
Python
シェルパイプが同期して動作しているようです。どうすれば非同期にできますか?