[terminal]关于进度条的学习
在PowerShell中隐藏光标
在pip的源码C:\Python36\Lib\site-packages\pip\utils\ui.py中发现了:
@contextlib.contextmanager
def hidden_cursor(file):
# The Windows terminal does not support the hide/show cursor ANSI codes,
# even via colorama. So don't even try.
if WINDOWS:
yield
# We don't want to clutter the output with control characters if we're
# writing to a file, or if the user is running with --quiet.
# See https://github.com/pypa/pip/issues/3418
elif not file.isatty() or logger.getEffectiveLevel() > logging.INFO:
yield
else:
file.write(HIDE_CURSOR)
try:
yield
finally:
file.write(SHOW_CURSOR)
本来都打算放弃了, 第二天在windows上PowerShell中一试居然可以
具体HIDE_CURSOR的代码在C:\Python36\Lib\site-packages\pip\_vendor\progress\helpers.py文件中
HIDE_CURSOR = '\x1b[?25l'
SHOW_CURSOR = '\x1b[?25h'
跟进度条的斗争, 从sys.stdout.write()和sys.stdout.flush(), 到progressbar2, 再到tqdm, 再到之后因为tqdm在jupyter notebook中好看, 于是折腾anaconda, 最终试着研究tqdm源码, 发现ascii参数, 再到研究pip源码,着实学到不少, 不过像本少这种门外少年, 还是需要时间慢慢来, 才能接受看源码的设定. 苦笑...
最后附上个人定制进度...称不上条了....
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
__author__ = "Sigai" # 9733, 9734
from collections import deque
import sys
from time import sleep d = deque([9733, 9734, 9733, 9734, 9733, 9734])
HIDE_CURSOR = '\x1b[?25l'
SHOW_CURSOR = '\x1b[?25h'
sys.stdout.write(HIDE_CURSOR)
while 1:
sys.stdout.write(f"\033[91m{''.join(chr(i) for i in d)}\033[0m")
sys.stdout.flush()
sys.stdout.write("\r")
sys.stdout.flush()
d.rotate(1)
sleep(.3)
sys.stdout.write(SHOW_CURSOR)
最新发现: https://my.oschina.net/jcseg/blog/178047
于是更改tqdm源码 _tqdm.py 实现彩色进度条, 实现jupyter notebook中类似的进度条咯~~
# format bar depending on availability of unicode/ascii chars
if ascii:
bar_length, frac_bar_length = divmod(
int(frac * N_BARS * 10), 10) bar = '\033[42m \033[0m' * bar_length
frac_bar = chr(48 + frac_bar_length) if frac_bar_length \
else ' '
更改源码中第416行的'#' 为上面第6行的仿真终端代码
愿望达成~~~
想去github提交下, 不过我是win10系统, cmd, powershell都有效果, 没试过别的平台
还是以后更厉害再去贡献吧...
2017.11.06 更新----------------------------------
早上看流畅的python中提到python环境变量PYTHONIOENCODING的设置, 心想会不会可以简单实现, 可是windows设置了环境变量并没有用, 可是tqdm可以输出正确的终端控制字符.
这就让我抓狂了, 所以反正无聊, 继续翻tqdm源码, 实验过程中发现 执行一次tqdm的进度条之后, cmd和powershell就可以正确输出终端控制字符了, WTF, tqdm肯定干了什么!!!
所以看trang, 发现是tqdm的shotcut而已, 只能从头看_tqdm部分了, 最后发现它import了colorama模块而且还执行了init的函数, 这TM肯定有事儿啊!
就去这个模块的PyPi看了一下, 果然init()之后就可以执行终端控制了.....可是现在只能到这了 init里面干的事太多了, 看不懂.目前可以简单利用了
python -c "from colorama import init;init();print('\033[42m \033[0m')"
2017.12.14 更新---------------------------------
脚本运行完成, 发出蜂鸣提示功能
import winsound
winsound.Beep(2015, 3000)
美剧<黑客军团>第一季第一集中破解心理医生那段其实是python脚本...一段打印颜色字符的代码很不错.
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m' prompt = bcolors.OKBLUE + 'root@elliot:' + bcolors.ENDC + ' ' print(prompt + 'ping (222.12.154.102)')
学习一下 https://ideone.com/R8VuQp
发现控制终端输出颜色已经有固定模式了
class INFO:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
ARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m' def __init__(self):
self.SUCCESS = self.OKGREEN + self.BOLD + 'Found SUCCESS!' + self.ENDC
self.FAILED = self.FAIL + self.BOLD + 'Found FAILED!' + self.ENDC
http://www.freebuf.com/articles/web/127888.html
python的colorama可实现跨平台
[terminal]关于进度条的学习的更多相关文章
- Android的ProgressBar进度条-android学习之旅(三十一)
ProgressBar 简介 ProgressBar是一种很常用的Ui,用于给复杂的操作显示进度,提供更好的用户相应.使用setProgress()incrementProgressBy()来设置进度 ...
- 第一百九十八节,jQuery EasyUI,ProgressBar(进度条)组件
jQuery EasyUI,ProgressBar(进度条)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 ProgressBar(进度条) ...
- iOS之小功能模块--彩虹动画进度条学习和自主封装改进
前言: 首先展示一下这个iOS小示例的彩色进度条动画效果: 阅读本文先说说好处:对于基础不好的读者,可以直接阅读文末尾的"如何使用彩虹动画进度条"章节,然后将我封装好的这个功能模块 ...
- Android再学习-20141018-布局-进度条
20141018-Android再学习 对齐至控件的基准线 为了保证印刷字母的整齐而划定的线(四线三格的第三条线). android:layout_alignBaseline 与父控件的四个边缘对齐( ...
- 一个简单、易用的Python命令行(terminal)进度条库
eprogress 是一个简单.易用的基于Python3的命令行(terminal)进度条库,可以自由选择使用单行显示.多行显示进度条或转圈加载方式,也可以混合使用. 示例 单行进度条 多行进度条 圆 ...
- unity零基础开始学习做游戏(五)看看你的完成度,进度条了解一下?
-------小基原创,转载请给我一个面子 上回书说道,英雄和魔王都做完了,子弹也能发射了,就是不知道啥时候能干死魔王.那小基得做个血条来展示一下,他离死不远了(•౪• ) 其实血条也可以看作是进度条 ...
- 第三周学习进度条+PSP0过程文档
第三周学习进度条 第三周 所花时间(包括上课) 14:30-15:35(65)+19:00-21:20(140)+17:52-19:00(68)+19:10-20:45(95)+21:00-22 ...
- NABCD框架(作业和事件的定期提醒)及第八周学习进度条
NABCD框架(作业和事件的定期提醒): N(need,需求): 你的创意解决了用户的什么需求? 我们的创意能够一定程度上督促我们的用户(学生)尽快完成自己近期的任务或者是作业.我们认为如果增设定时提 ...
- 自己定义View学习之12/7(进度条之混合模式)
今天重点内容是我们学习自己定义view里面的混合模式.事实上我们的画布就跟photoshop一样.是个图层关系,一层盖着一层.这样就导致有非常多种覆盖模式,这就是我们今天的主题."混合模式& ...
随机推荐
- (二)Django模板的应用
一.配置项目的基础模板,分三部分 base.html 基础部分,需要包括基本的HTML标签 header部分 body部分 html闭合标签 {% load staticfiles %} <!D ...
- react-antd-input-onPressEnter
2020-01-11 ant-Design ,Input , onPressEnter 和 onChange 的区别 需求:看下图,右边栏配置开关组件的内容.输入内容,不想要左边实时更改 原来的代码: ...
- 开启我的python之路,第一节,git版本管理工具
git版本管理工具 一.git功能与结构 1.Git是分布式管理系统,服务端和客户端都有版本控制功能,都能进行代码的提交,合并 2.git分为工作区,暂存区,本地仓库和远程仓库 二.git安装与查看 ...
- forkjoin及其性能分析,是否比for循环快?
最近看了网上的某公开课,其中有讲到forkjoin框架.在这之前,我丝毫没听说过这个东西,很好奇是什么东东.于是,就顺道研究了一番. 总感觉这个东西,用的地方很少,也有可能是我才疏学浅.好吧,反正问了 ...
- React Hooks 实现和由来以及解决的问题
与React类组件相比,React函数式组件究竟有何不同? 一般的回答都是: 类组件比函数式组件多了更多的特性,比如 state,那如果有 Hooks 之后呢? 函数组件性能比类组件好,但是在现代浏览 ...
- [C++]最小生成树
1. 最小生成树定义 树是指没有环路的图,生成树就是指一个图上面删除一些边,使它没有环路. 最小生成树就是指生成树中边权之和最小的那一种. 上图的最小生成树就是这样: 2. Prim 算法 2.1. ...
- Your Ride Is Here 你的飞碟在这儿 USACO 模拟
1001: 1.1.1 Your Ride Is Here 你的飞碟在这儿 时间限制: 1 Sec 内存限制: 128 MB提交: 9 解决: 9[提交] [状态] [讨论版] [命题人:外部导入 ...
- Akka Java 中文文档
Akka Java 中文文档 Introduction What is Akka? | 什么是Akka? Why Akka? | 为什么选择Akka? Getting Started | Akka入门 ...
- @RequestParam,@PathVariable,@RequestBody
@RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @P ...
- 使用RobotFramework的DataBaseLibrary(Java实现)
RobotFramework能用Python和Jython两条腿走路.但有的时候你得选一条.今天就碰上个问题,为了整合其它模块必须用Java实现的DataBaseLibrary 其实实它很简单,记录步 ...