Python 输出多行时如何原地刷新?

2018-07-20 10:40:54 +08:00
 reaCodes
单行原地刷新方法挺多的,多行原地刷新要这么做?

类似这样的多行
+--------+------------------------------+------------+------------------+
| 代码 | 名称 | 估算涨幅 | 更新时间 |
|--------+------------------------------+------------+------------------|
| 110022 | 易方达消费行业 | -0.61% | 2018-07-20 10:39 |
| 260108 | 景顺长城新兴成长混合 | -0.03% | 2018-07-20 10:39 |
| 000220 | 富国医疗保健行业混合 | +0.19% | 2018-07-20 10:39 |
| 003095 | 中欧医疗健康混合 A | +0.07% | 2018-07-20 10:39 |
| 161725 | 招商中证白酒指数分级 | -0.44% | 2018-07-20 10:39 |
| 160222 | 国泰国证食品饮料行业指数分级 | -0.20% | 2018-07-20 10:39 |
| 270002 | 广发稳健增长 | +0.08% | 2018-07-20 10:39 |
| 519690 | 交银稳健配置混合 A | -0.04% | 2018-07-20 10:38 |
| 270042 | 广发纳斯达克 100 指数 | -0.48% | 2018-07-20 04:00 |
| 001092 | 广发生物科技指数(QDII) | -0.48% | 2018-07-20 04:00 |
| 160213 | 国泰纳斯达克 100 指数 | -0.45% | 2018-07-20 04:00 |
| 000369 | 广发全球医疗保健现钞 | -0.34% | 2018-07-20 04:00 |
+--------+------------------------------+------------+------------------+
11354 次点击
所在节点    Python
24 条回复
wizardoz
2018-07-20 11:05:06 +08:00
xiexingjia
2018-07-20 11:12:42 +08:00
import sys
import time

for i in range(10):
print('\r{}'.format(i), end='')
sys.stdout.flush()
time.sleep(0.1)
print()
xiexingjia
2018-07-20 11:14:05 +08:00
import sys
import time

for i in range(10):
[缩进] print('\r{}'.format(i), end='')
[缩进] sys.stdout.flush()
[缩进] time.sleep(0.1)
print()
qsnow6
2018-07-20 11:14:39 +08:00
清屏后再打印就可以了
reaCodes
2018-07-20 11:26:15 +08:00
@wizardoz 我用的 Windows 系统,貌似没有这个模块吧
reaCodes
2018-07-20 11:30:17 +08:00
@qsnow6 清屏在打印屏幕容易闪烁,能不能直接覆盖?
qsnow6
2018-07-20 11:34:17 +08:00
@reaCodes 可以看看这个项目 https://www.v2ex.com/t/318369
zhangpeter
2018-07-20 11:40:12 +08:00
print('/r666')
whoami9894
2018-07-20 12:04:32 +08:00
多行刷新 windows 下暂时不知道怎么实现

单行的话 windows 下#3 那个方法 line5 的 print 函数换成 sys.stdout.write 就可以了
reaCodes
2018-07-20 12:23:03 +08:00
@qsnow6 这个项目貌似也不支持 Windows
0312birdzhang
2018-07-20 12:39:16 +08:00
`\r`了解一下?
scalaer
2018-07-20 12:43:49 +08:00
退格键了解下
scalaer
2018-07-20 12:44:34 +08:00
\x08
reaCodes
2018-07-20 13:15:57 +08:00
@mggis0or1 那效果跟清屏命令类似吧,也会出现闪烁,不是覆盖的那种效果
reaCodes
2018-07-20 13:16:29 +08:00
reaCodes
2018-07-20 13:21:46 +08:00
@0312birdzhang 这个只能跳到最后一行的开后,不能跳到第一行的开头,对多行不起作用
ysc3839
2018-07-20 13:28:56 +08:00
@reaCodes Windows 的话有 API 设置控制台光标位置,设置后再 print 就可以覆盖了。
0312birdzhang
2018-07-20 13:56:06 +08:00
@reaCodes #16 试试这个

```
import time
import sys
count = 1
while count < 99:
sys.stdout.write("current {0}%\r".format(count))
sys.stdout.flush()
count += 1
time.sleep(0.5)
```
yuyang
2018-07-20 14:23:42 +08:00
https://github.com/Yinzo/reprint 应该是符合你的要求的,配合 prettytable 搞一搞,linux 没问题,windows 不知道
NxnXgpuPSfsIT
2018-07-20 16:16:46 +08:00
@reaCodes Windows 下面我见过两种比较简单的解决方案
gist.github.com/littlecodersh/2ab4d88070eb16bf9f2b26f7cbc16ad0

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/472582

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX