我正在尝试编写一个显示python脚本输出的bash脚本。我希望输出每秒都刷新一次,所以我的脚本看起来像这样(run.sh
):
#!/bin/bash
export INTERVAL=1
export SCRIPT="something.py"
while [ true ]
do
clear
python ${SCRIPT}
sleep ${INTERVAL}
done
然而,当python脚本工作时,屏幕会闪烁(涉及一些Web访问)。我怎样才能使这个更复杂,等待脚本完成清除以前的内容?
提前致谢!
答案 0 :(得分:5)
使用手表。它只会在整个脚本完成后更新屏幕,并且它会处理诸如清除屏幕和处理大于单个屏幕的输出之类的事情。
watch -n ${INTERVAL} 'python ${SCRIPT}'
如果您想查看手表如何处理长时间运行任务的示例,请执行以下操作:
watch 'date; echo; echo Long running task...; sleep 3; echo; date'
答案 1 :(得分:0)
快速方法是建立一个临时文件:
tmpf=`mktemp`
while [ condition ]
do
python ${SCRIPT} > $tmpf
clear
cat $tmpf
sleep ${INTERVAL}
done
rm $tmpf
但是,这需要您在退出时进行一些清理。除此之外,我建议将整个循环移动到python中,因为真的,为什么不呢?您可以使用子进程来分叉另一个shell,甚至可以获得更通用的程序。
<强>补充:强> 您可以使用内置的陷阱(here上的文章)来完成清除脚本时自动清理。
答案 2 :(得分:0)
这是一个丑陋的黑客,但不使用临时文件或fifo:
a=$(clear; python ${SCRIPT})
echo $a
但严重:最好的方法是在您的脚本中加入屏幕清除。给它一个开关-clear
或类似的东西。