python 控制台单行刷新,多行刷新实例

先贴出单行刷新实现的进度条:

对于控制台的单行刷新,比较简单,先直接贴出代码:

 strarrs = ['/','|','\\']
 for i in range(15):
   sys.stdout.write(strarrs[i % 3]+'{}/15:'.format(i+1)+'#' * i+'\r')
   sys.stdout.flush()
   time.sleep(1)

对于单行刷新以及坑

1.print是对sys.stdout.write的友好封装,利用sys.stdout.write把数据输出到标准输出,貌似也可用print来做,这里没有深入研究

2.一定要在write()里面加入 '\r',或者是'\b'等转义字符,其中python转义字符表如下:

转义字符 描述
\(在行尾时) 续行符
\\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数yy代表的字符,例如:\o12代表换行
\xyy 十进制数yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

这就相当于是回车到了输出开头,然后,重新写,在刷新!

如此,一个简单的进度条就实现了!

接下来说一说,多行的刷新问题:

多行刷新,就不能简单的使用输入输出了,应该使用的是一个curses的库,这个库,是以前用c写的库,如果熟悉c下,curses库的使用的话,用python会上手很快.

但是我之前并没有接触罗..一点一点看罗- - ,还有一点就是这个库,现在好像貌似只能在linux下使用,windows不能使用,mac不太清楚,windows下貌似是有别的解决方案

上效果图:

大部分实现curses,的程序模式都是基于以下的代码

stdscr=curses.initscr()
 # 一些常用设置
 curses.noecho()
 curses.cbreak()
 stdscr.keypad(1)
 # 以下写监听按键的代码或者loop代码等...
  ....
#关闭之前的操作
 stdscr.keypad(0)
 curses.echo()
 curses.nocbreak()
 curses.endwin()

主要的程序逻辑都在...中,下面直接贴出代码:

import curses
import time
import os
import random
stdscr = curses.initscr()
curses.noecho()   #不输出- -
curses.cbreak()   #立刻读取:暂不清楚- -
stdscr.keypad(1)  #开启keypad
stdscr.box()

width = os.get_terminal_size().columns
height = os.get_terminal_size().lines
c_y = height//2 - 1
c_x = width//2 - 10
stdscr.addstr(c_y+5,c_x,'press C to continue',curses.A_REVERSE)
while True:
  c = stdscr.getch()
  if c == ord('c') or c == ord('C'):
    break

zh_ = '1234567890-qwertyuiopasdfghjklzxcvbnm,[;l,]/~!@#$%^&*()_+}"?{:><}"'';'
while True:
  for linei in range(1,width-1):
    for linej in range(1,height-1):
      if linej == c_y:
        if linei <= 5 or linei+6 >= width:
          stdscr.addstr(linej,linei,'$')
        else:
          stdscr.addstr(linej,c_x,time.strftime('%Y-%m-%d %H:%M:%S'),curses.A_BOLD)
      else:
        randominx = random.randint(0,len(zh_)-1)
        stdscr.addstr(linej,linei,zh_[randominx])
  stdscr.move(c_y,c_x)
  stdscr.refresh()
  time.sleep(1)

curses.endwin()

这样,一个多行刷新的demo就完成了.

以上这篇python 控制台单行刷新,多行刷新实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • PyCharm刷新项目(文件)目录的实现

    利用PyCharm做项目,有时会有写文件(保存到项目中)的需求,但是可能是因为电脑比较慢,项目目录不会自动更新,需要自己手动刷新. 可以自行设置"显示刷新图标":view -->toolbar,需要刷新时,点一下就好了. 以上这篇PyCharm刷新项目(文件)目录的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python实现文本进度条 程序进度条 加载进度条 单行刷新功能

    python实现文本进度条 程序进度条 加载进度条 单行刷新功能,具体内容如下所示: 利用time库来替代某个程序 的进行过程,做实例, 思路是,简单打印出来程序进度 单行刷新关键是\r, python默认是print后换行,所以加一个\r是光标回退到之前位置 import time tm=10 print('{:-^18}'.format('开始')) for i in range(tm+1): a='#'*i b='.'*(tm-i) c=(i/tm)*100 print('\r{:^3.0

  • python 控制台单行刷新,多行刷新实例

    先贴出单行刷新实现的进度条: 对于控制台的单行刷新,比较简单,先直接贴出代码: strarrs = ['/','|','\\'] for i in range(15): sys.stdout.write(strarrs[i % 3]+'{}/15:'.format(i+1)+'#' * i+'\r') sys.stdout.flush() time.sleep(1) 对于单行刷新以及坑 1.print是对sys.stdout.write的友好封装,利用sys.stdout.write把数据输出到

  • python 文件操作删除某行的实例

    使用continue跳过本次写循环就可以了 #文本内容 Yesterday when I was young 昨日当我年少轻狂 The tasting of life was sweet 生命的滋味是甜的 As rain upon my tongue tasting I lived by night and shunned the naked light of day tasting123 And only now I see how the time ran away tasting tast

  • Python控制台输出时刷新当前行内容而不是输出新行的实现

    需求目标 执行Python程序的时候在控制台输出内容的时候只显示一行,然后自动刷新内容,像这样: Downloading File FooFile.txt [47%] 而不是这样: Downloading File FooFile.txt [47%] Downloading File FooFile.txt [48%] Downloading File FooFile.txt [49%] 实现环境 Python 3.x 实现代码 import time for i in range(10): t

  • jquery实现无刷新验证码的简单实例

    1. 思路: 页面上的验证码图片是servlet,采用jquery实现异步校验信息 2. 所用到的文件 VerifyCodeServlet.java   --用于生成图片的servlet ResultServlet.java          --用于校验验证码正确性的servlet verifyCode.js                  --校验的js文件 jquery.js                         --jquery包里的源文件 verifyCode.jsp   

  • python采用getopt解析命令行输入参数实例

    本文实例讲述了python采用getopt解析命令行输入参数的方法,分享给大家供大家参考. 具体实例代码如下: import getopt import sys config = { "input":"", "output":".", } #getopt三个选项,第一个一般为sys.argv[1:],第二个参数为短参数,如果参数后面必须跟值,须加:,第三个参数为长参数 #是一个列表, opts, args = getopt.g

  • Python实现命令行通讯录实例教程

    1.实现目标 编写一个命令行通讯录程序,可以添加.查询.删除通讯录好友及电话 2.实现方法 创建一个类来表示一个人的信息.使用字典存储每个人的对象,名字作为键. 使用pickle模块永久地把这些对象存储下来. 使用字典内建的方法添加.删除修改人员信息. 3.思维导图 4.编写伪代码 # 1.创建字典用来存储通讯录信息 # 2.创建人员类,包含姓名.关系.电话三个属性 # 3.创建操作类,包含增加.查询.删除人员,退出,保存并退出五个方法 # 4.程序运行 # 5.判断通讯录文件是否存在 # 6.

  • Android下拉刷新框架实现代码实例

    前段时间项目中用到了下拉刷新功能,之前在网上也找到过类似的demo,但这些demo的质量参差不齐,用户体验也不好,接口设计也不行.最张没办法,终于忍不了了,自己就写了一个下拉刷新的框架,这个框架是一个通用的框架,效果和设计感觉都还不错,现在分享给各位看官. 一. 关于下拉刷新 下拉刷新这种用户交互最早由twitter创始人洛伦•布里切特(Loren Brichter)发明,有理论认为,下拉刷新是一种适用于按照从新到旧的时间顺序排列feeds的应用,在这种应用场景中看完旧的内容时,用户会很自然地下

  • 将form表单通过ajax实现无刷新提交的简单实例

    实例如下: //将form转换为AJAX提交 function ajaxSubmit(url,frm,fn){ var dataPara=getFormJson(frm); $.ajax({ url:url, type:"post", data:dataPara, async:false, dataType:'txt', success:fn }); } //将form中的值转换为键值对 function getFormJson(frm){ var o={}; var a=$(frm)

  • winform c#中子窗体关闭刷新父窗体的实例

    父窗体Form1 子窗体Form2 Form1中有一个datagridview控件和一添加按钮, Form2中有一个Text控件和一个保存按钮 要求点击Form1窗体上的添加按钮,弹出Form2, 再text里面输入内容,点击保存自动关闭Form2,刷新Form1中datagridview中的数据 From1中:  private void button3_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.ShowDia

  • Android下拉刷新控件PullToRefresh实例解析

    Android中很多时候都会用到上下拉刷新,这是一个很常用的功能,Android的v4包中也为我们提供了一种原生的下拉刷新控件--SwipeRefreshLayout,可以用它实现一个简洁的刷新效果,但今天我们的主角并不是它,而是一个很火的第三方的上下拉刷新控件--PullToRefresh.PullToRefresh包括PullToRefreshScrollView.PullToRefreshListView.PullToRefreshGridView等等很多为我们提供的控件,我们可以在xml

随机推荐