文档章节

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

彼得
 彼得
发布于 2012/11/14 19:59
字数 369
阅读 4187
收藏 7

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

先提供一种很土的办法,把进度落地文件为 例如 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)

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

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



© 著作权归作者所有

共有 人打赏支持
彼得

彼得

粉丝 39
博文 122
码字总数 38726
作品 0
深圳
程序员
私信 提问
利用Python自动化操作鼠标键盘刷金币, 工作室都靠这种脚本搬砖!

不管是英雄联盟还是王者荣耀,总是有一个特殊的模式可以用来刷金币,为什么说是特殊模式呢?因为打的都是人机,或者并不影响游戏平衡,被其它玩家举报,同时你这种模式的战绩也没人去看你的。...

Python新世界
2018/07/19
0
0
用 Python 替代 Bash 脚本

对于Linux用户来说,命令行的名声相当的高。不像其他操作系统,命令行是一个可怕的命题,但是对于Linux社区中那些经验丰富的大牛,命令行却是最值得推荐鼓励使用的。通常,命令行对比图形用户...

葱油拌面
2013/04/10
9.3K
2
Python3.6实现12306火车票自动抢票,附源码

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理...

猫咪编程
2018/06/05
0
0
《Python从小白到大牛》第3章 第一个Python程序

本章以HelloWorld作为切入点,介绍如何编写和运行Python程序代码。 运行Python程序主要有两种方式: 1.交互式方式运行 2.文件方式运行 本章介绍这两种运行方式实现HelloWorld程序。 使用P...

tony关东升
2018/06/26
0
0
p的设计与实现:动态修改bash、zsh的提示符

最近看了TJ大神的node版本管理工具——n的源码(shell编写),收获颇多。我根据自己的需求编写了一个叫做的工具,默认给出了bash、zsh提示符的多个主题,可以通过终端中的图形界面手动进行选...

樂天
2015/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
34分钟前
1
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
54分钟前
1
0
远程获得的有趣的linux命令

使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和...

Linux就该这么学
今天
6
0
聊聊flink的AsyncWaitOperator

序 本文主要研究一下flink的AsyncWaitOperator AsyncWaitOperator flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/operators/async/AsyncWaitOperator.java ......

go4it
今天
5
0
Java并发编程基础(四)

ThreadGroup 在主线程创建得线程,如果没有给他指定线程组,那么创建的线程,默认和主线程同一个线程组。线程组可以底下可以是线程,也可以实线程组。 构建线程组的方法: private ThreadGr...

chendom
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部