【发布时间】:2019-07-01 22:21:19
【问题描述】:
我有一个如下所示的 bash 脚本:
name=""
while read i; do
if [ -z "$name" ]; then
name="$i"
else
echo "$i"
fi
done < <(python tmp.py)
echo "$name"
tmp.py 是这样的:
import time
for i in range(5):
print(i)
time.sleep(.5)
但问题是 bash 脚本在开始 while 循环之前等待 python 子shell 完成。有没有办法在生成每一行时读取子shell输出?我需要能够修改循环内的外部脚本环境(如name 的值),因此while 循环不能是子shell。我正在使用 bash 5.0。
【问题讨论】:
-
等待输出的不是 bash 脚本,而是 python 缓冲其输出。每次需要处理输出时刷新缓冲区。
-
糟糕,就是这样。谢谢你。
sys.stdout.flush()给有同样问题的其他人。如果你想给出一个答案,我可以标记你是正确的。
标签: bash