文档章节

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

彼得
 彼得
发布于 2012/11/14 19:59
字数 369
阅读 3951
收藏 6
点赞 1
评论 0

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

先提供一种很土的办法,把进度落地文件为 例如 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新世界
07/19
0
0
《Python从小白到大牛》第3章 第一个Python程序

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

tony关东升
06/26
0
0
Python刷题提升——第一季(题目篇)

博客写了一年多了,也积攒了100+文章分享 感谢大家陪我一起学习 每次在评论区看到你们的疑问和鼓励,我甚是欣慰 在部分文章最后留有一些问题,大家都会踊跃给出自己的答案 除了之前的Python数...

ID王大伟
05/05
0
0
Python3.6实现12306火车票自动抢票,附源码

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

猫咪编程
06/05
0
0
p的设计与实现:动态修改bash、zsh的提示符

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

樂天
2015/11/08
0
0
Python小白学习笔记(成长之路)

Python语言可能是第一种即简单又功能强大的编程语言。它不仅适合于初学者,也适合于专业人员使用,更加重要的是,用Python编程是一种愉快的事。本身将帮助你学习这个奇妙的语言,并且向你展示...

乐先生
2013/12/23
0
0
Python开发(基础):初识Python

Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quo...

wbb827
07/03
0
0
Python标准库06 子进程 (subprocess包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 谢谢Tolbkni Kao帮我纠正错误 这里的内容以Linux进程基础和Linux文本流为基础。subprocess包主要功能是...

张旭0512
2014/05/27
0
0
云计算培训学院,云计算Python自动化运维开发实战

都忘记是什么时候知道python的了,我是搞linux运维的,早先只是知道搞运维必须会shell,要做一些运维自动化的工作,比如实现一些定时备份数据啊、批量执行某个操作啊、写写监控脚本什么的。后...

长沙千锋
05/15
0
0
Python学习笔记——Python起步

本章将对 Python 的主要特性做一个快速介绍,这样你就可以借助以前的编程经验识别出熟悉的语言结构,并立刻将 Python 付诸使用。虽然细节内容会在后续的章节中逐一讲解,但是对整体的了解可以让...

陶邦仁
2013/01/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
4
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
1
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
165
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部