您现在的位置是:首页 > 文章详情

python : 动态不刷屏幕输出 python/shell 实现

日期:2019-02-17点击:399

前言
后台运行程序有一种需求,比如查看当前进度,想在终端看到某个值的变化情况:

先提供一种很土的办法,把进度落地文件为 例如 process,采用创建写的方式。然后可以使用watch -n 1 cat process来查看进度。

这里提供两种方式,python和shell

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版本,如下(附一个多线程输出进度的例子)

基础用法示例

#! /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) 

子线程完成自己的任务,主线程跟踪执行进度。

** 小编推荐一个学python的学习qun 740322234
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

**

#! /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()
原文链接:https://yq.aliyun.com/articles/690648
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章