Python3 上实现命令行环境的多行独立进度条 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Yinz
V2EX    分享创造

Python3 上实现命令行环境的多行独立进度条

  •  
  •   Yinz
    Yinzo 2016-11-05 22:39:04 +08:00 5772 次点击
    这是一个创建于 3263 天前的主题,其中的信息可能已经有所发展或是发生改变。

    reprint 是一个适用于 Python3 的简易变量绑定与多行输出刷新的库

    能够以优雅的方式实现多行独立进度条与多线程状态监控

    Demo_gif

    特性

    • 简易变量绑定,内容修改时自动刷新命令行输出
    • 多行输出刷新,实现不同行内容由独立变量控制,修改特定变量即能刷新命令行中特定行的内容
    • 多线程安全,使用了 threading.Lock 实现线程安全
    • 无外部库依赖

    项目地址 https://github.com/Yinzo/reprint

    之前用 Docker pull image 的时候看到 Docker 的多行独立刷新,就觉得很酷。结果 Google 了很多也没找到 Python 上实现的方法,都是只能重复刷新同一行而不能刷新多行。于是突发奇想,通过手动填充 padding 来实现『伪多行』,然后封装成一个库,让使用更加优雅,最终成为了 reprint 这个库 :D

    第 1 条附言    2016-11-06 15:07:48 +08:00

    现已支持 Python2

    9 条回复    2017-11-07 15:32:29 +08:00
    qweweretrt515
        1
    qweweretrt515  
       2016-11-06 01:06:43 +08:00
    可以参考下 npm
    Yinz
        2
    Yinz  
    OP
       2016-11-06 01:54:47 +08:00
    @qweweretrt515 平时不怎么写 JS
    npm 也用到了类似的多行输出吗:D
    试了一下 install 似乎没有?还是说我姿势不对
    qweweretrt515
        3
    qweweretrt515  
       2016-11-06 09:42:30 +08:00
    @Yinz 好像是 cnpm 它的进度条不错
    imcocc
        4
    imcocc  
       2016-11-06 12:12:33 +08:00 via iPhone
    楼主考虑过兼容 2.7 吗?
    Yinz
        5
    Yinz  
    OP
       2016-11-06 13:38:43 +08:00
    @imcocc 我觉得没问题 :D
    Yinz
        6
    Yinz  
    OP
       2016-11-06 15:08:09 +08:00   1
    @imcocc 0.1.0 版本已兼容 py2 :D
    nfroot
        7
    nfroot  
       2016-11-07 00:17:43 +08:00
    "手动填充 padding"是什么意思 难道是其实数据上是一行 但是展示出来因为一行不够所以导致换行变成了多行?
    Yinz
        8
    Yinz  
    OP
       2016-11-07 13:28:49 +08:00
    @nfroot 2333 对,实际上所有输出都在同一行,只是因为填充了 padding 超长而换行显示了而已,你可以改变一下窗口大小就能看出来了;D
    liunx
        9
    liunx  
       2017-11-07 15:32:29 +08:00
    "都是只能重复刷新同一行而不能刷新多行",博主,我想实现 5 个">"符号在输入屏幕上不断循环,代表程序正在运行状态,现在能有个简单的代码实现了,但当下一次重复是,实际上是使用 os.system('cls')把屏幕全部清空了再在原地方循环,可以有办法只刷新一行吗?因为我还想在屏幕显示另外的信息,不想被这个一并清空。代码如下:
    import sys, time, os
    i = 0
    while i < 5:
    sys.stdout.write('>')
    sys.stdout.flush()
    time.sleep(0.3)
    i += 1
    if i >= 5:
    a = os.system('cls')
    i = 0
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2297 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 15:58 PVG 23:58 LAX 08:58 JFK 11:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86