2011-03-28 76 views
1

我正在嘗試編寫一個顯示python腳本輸出的bash腳本。我想輸出每秒鐘刷新一次,所以我的腳本看起來像這樣(run.sh):Bash腳本在終端中顯示更新信息

#!/bin/bash 

export INTERVAL=1 
export SCRIPT="something.py" 

while [ true ] 
    do 
    clear 
    python ${SCRIPT} 
    sleep ${INTERVAL} 
    done 

屏幕,但是,閃爍而python腳本作品(有一些涉及網絡接入)。我怎樣才能使這個更復雜,等待腳本完成,然後清除我曾經擁有的?

在此先感謝!

回答

4

使用手錶。它只會在整個腳本完成時更新屏幕,並且會處理諸如清除屏幕和處理比單個屏幕大的輸出。

watch -n ${INTERVAL} 'python ${SCRIPT}'

如果你想看到的手錶長時間運行的任務是如何工作的例子,這樣做:

watch 'date; echo; echo Long running task...; sleep 3; echo; date'

0

一個快速的方法是建立一個臨時文件:

tmpf=`mktemp` 

while [ condition ] 
    do 
    python ${SCRIPT} > $tmpf 
    clear 
    cat $tmpf 
    sleep ${INTERVAL} 
    done 

rm $tmpf 

這就需要你做退出一些清理,但。除此之外,我會建議將整個循環移入python,因爲真的,爲什麼不呢?您可以使用子進程分離出另一個shell,甚至可以獲得更通用的程序。

補充: 可以湊合着陷阱內置(here的上一篇文章),當你殺了你的腳本來自動完成清理工作。

0

這是一個醜陋的黑客攻擊,但不使用臨時文件或FIFO的:

a=$(clear; python ${SCRIPT}) 
echo $a 

但嚴重的是:最好的辦法是將屏幕清在你的腳本。給它一個開關-clear或類似的東西。