我以爲每個進程管道連接的工作是異步的,但事實並非如此。Shell管道異步工作
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
以下代碼顯示每行一個一個由2秒。
$ ./a.py < test.txt
HELLO
WORLD
PYTHON
但下面的代碼完全顯示了一次。
$ ./a.py < test.txt | ./b.py
Hello
World
Python
看起來管殼是同步工作的。我怎樣才能異步?
感謝您的回答。我在http://stackoverflow.com/a/7608205/395425中找到了類似的線程。在python2.7中,「for」語句正在等待EOF,但python3.3不會等待。 –
我後來發現,python 2.x「for sys.stdin中的行」不會等到EOF。它似乎在緩衝。 –