文档章节

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

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

精选30+云产品,助力企业轻松上云!>>>

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

先提供一种很土的办法,把进度落地文件为 例如 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
深圳
程序员
私信 提问
加载中
请先登录后再评论。
利用sys打印进度条

在很多常见中,需要对当前处理的进度进行显示,这个时候就需要进度条了,在python中,也有封装好的进度条模块,当然,也可以自己编写一个简单的进度条来帮助理解进度条的实现。 首先,需要理...

osc_7zkrlaio
2018/08/01
2
0
python sys.stdin,sys.stdout,sys.stderr

stdin , stdout ,以及stderr 变量 包含与标准I/O流 对应的流对象. 如果需要更好地控制输出,而print 不能满足我们的要求, 它们就是我们所需要的. 也可以替换它们, 这时候我们可以重定向输出和...

osc_zfz30hgc
2018/01/26
3
0

本篇文章,主要介绍如何通过Python发送Ctrl + C的信号,中断正在执行的任务。 案例故事: Android系统测试或App测试过程中, 可以考虑用adb shell screenrecord /sdcard/video.mp4 命令录制屏...

zipython
06/12
0
0
go执行python/shell脚本

一、背景 项目的后台是golang, 但是一个子模块是python写好了的,为了能够快速使用上,打算用golang调用python。但是从长远的角度来看,在服务内部,跨语言,跨进程,最好使用RPC的方式。 ...

项昂之
2019/12/13
16
0
我用Python写自动刷代理服务IP的经过

应朋友要求实现一个动态切换代理服务器IP的功能,朋友只发了一个博客链接给我,用Python做的,当时我对Python并不熟悉,但是那篇博客中的思路确实很清晰,于是决定安装Python,按照博客的思路...

guoxiaojie_415
06/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

1Mn18Cr18N无磁护环强度高

1Mn18Cr18N高氮奥氏体不锈钢具有强韧性好、耐蚀性好、无磁等诸多优点,成为核主泵飞轮保持环材料的选择。 保持环的热套工序要求保持环材料具备优良的热膨胀性能,飞轮保持环完整性的保证要求...

无磁钢
7分钟前
10
0
比较器,Comparator与Comparable

Comparable比较器 从JDK1.2后提供了比较器的接口:Comparable接口。 public interface Comparable<T>{ /** * 实现对象的比较处理操作 * @param o 要比较的对象 * @return...

哼着我的小调调
19分钟前
9
0
以每种语言编译时,在C和C ++中都有效的代码能否产生不同的行为?

问题: C and C++ have many differences, and not all valid C code is valid C++ code. C和C ++有很多区别,并非所有有效的C代码都是有效的C ++代码。 (By "valid" I mean standard code w......

富含淀粉
23分钟前
0
0
使用getApplication()作为上下文的对话框抛出“无法添加窗口-令牌null不适用于应用程序”

问题: My Activity is trying to create an AlertDialog which requires a Context as a parameter. 我的活动试图创建一个AlertContext,它需要一个Context作为参数。 This works as expect......

法国红酒甜
53分钟前
11
0
亚马逊测评买家号多开_可以解决这个问题嘛?_微信公众号: VMlogin中文版

对于很多亚马逊卖家来说,做亚马逊测评是并不可少的,都在为了自己的店铺能够获得更多的销售,着重培养自己产品的各项属性,以求获得一个更好的权重排名从而获得更多的曝光,但是在旺季期间亚...

竹节猫-ASOer
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部