【发布时间】:2022-01-12 21:48:54
【问题描述】:
我有这两个脚本:
时钟.py
#!/usr/bin/env python3
import time
while True:
print("True", flush=True)
time.sleep(1)
continuous_wc.py
#!/usr/bin/env python3
import sys
def main():
count = 0
for line in sys.stdin:
sys.stdout.write(str(count))
count += 1
if __name__=='__main__':
main()
我像这样运行它们:
./clock.py | ./continuous_wc.py
我希望它能打印出来:
1
2
3
4
5
...
每一秒都像一个时钟,因为它基本上是在计算文件中的行数。但它不输出任何东西。为什么不呢?
【问题讨论】:
-
你需要刷新
clock.py中的stdout缓冲区。 -
print("True", flush=True) -
问题不在于读取,而在于写入管道。
-
您应该在
continuous_wc.py中的计数后写一个换行符,因为您希望每个数字位于不同的行。这也将解决问题,因为输出是行缓冲的。 -
你为什么使用
sys.stdin和sys.stdout,而不是input()和print()?