後臺運行程序有一種需求,好比查看當前進度,想在終端看到某個值的變化狀況:python
先提供一種很土的辦法,把進度落地文件爲 例如 process,採用建立寫的方式。而後可使用watch -n 1 cat process來查看進度。shell
這裏提供兩種方式,python和shellbash
shell版本,以下(附帶一個進度條的例子)多線程
#! /bin/bash for ((i=0; $i<=100; i+=1)) do printf "progress: [%-100s] %d%%\r" "xxxxxxxxxx xxx xxx" $i sleep 1 done
function sleepPrograss(){ [ $# -eq 0 ] && echo "sleepPrograss Usage: sleepPrograss 10 " [ $# -eq 0 ] && return 1 allTime=$1 strDone='' stepTime=$(echo "scale=1; $allTime/100" | bc) for ((i=0; $i<=100; i+=1)) do printf "progress: [%-100s] %d%%\r" $strDone $i sleep $stepTime strDone+='#' done echo }
python版本,以下(附一個多線程輸出進度的例子)線程
基礎用法示例code
#! /usr/bin/env python import os import sys import time while 1: os.write(1, "\r[%.3f]" % time.time()) sys.stdout.flush() time.sleep(1)
子線程完成本身的任務,主線程跟蹤執行進度。utf-8
#! /usr/bin/env python # -*- coding: utf-8 -*- ''' @filename : demo.py @authors : U{peterguo<mailto: peterguo@tencent.com>} @copyright: tencent @date : 2012-11-15 @version : 1.0.0.1 ''' import os import sys import time import thread g_nTotal = 100 g_nProcessed = 0 g_fStartTime = time.time() def simpleThdreadFun(interval): global g_nProcessed global g_nTotal while g_nTotal > g_nProcessed: time.sleep(interval) g_nProcessed += 1 thread.exit_thread() def test(): global g_nTotal global g_nProcessed global g_fStartTime g_fStartTime = time.time() thread.start_new_thread(simpleThdreadFun, (1,)) thread.start_new_thread(simpleThdreadFun, (2,)) thread.start_new_thread(simpleThdreadFun, (3,)) thread.start_new_thread(simpleThdreadFun, (4,)) while True: time.sleep(0.5) fRunTime = time.time() - g_fStartTime nLeftNum = g_nTotal - g_nProcessed fLeftTime = fRunTime * nLeftNum / (g_nProcessed + 0.1) fPrograss = 100.0 * g_nProcessed / g_nTotal os.write(1, "\rLeftTime[%.3f]\tLeftNum[%d]\tProgress[%.3f %% (%d/%d) ]" % (fLeftTime, nLeftNum, fPrograss, g_nProcessed, g_nTotal)) sys.stdout.flush() if g_nTotal <= g_nProcessed: break print "\nTest Done, use %.3f seconds" % (time.time() - g_fStartTime) if __name__=='__main__': test()