Python 输出刷新的问题

2016-07-13 13:31:03 +08:00
 DuckJK
#!/usr/bin/python
# coding:utf-8
import sys
import time
import os

urls = ['http://one.com/1', 'http://one.com/2', 'http://one.com/3']

while 1:
	date_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
	sys.stdout.write('%s\n' % date_time)
	for url in urls:
		sys.stdout.write('%s\n' % url)
	time.sleep(2)
	os.system('clear')
	

像这种输出之后把已经输出的清空,再输出下一次还有别的方法么?试了下'\r',但是没达到预期效果,其中 urls 是一个变量,定时更新。

谢谢

3345 次点击
所在节点    Python
5 条回复
shyling
2016-07-13 13:33:52 +08:00
可以用\b 退格
可以用 termios 之类的 api
DuckJK
2016-07-13 14:11:02 +08:00
@shyling \b 的退格只会对一行起作用
felixzhu
2016-07-13 14:20:37 +08:00
如果不换行的话'\r'才有用吧

你把最后一行换成
sys.stdout.write('\033[4A')

看看是不是你要的效果
pixstone
2016-07-13 14:33:18 +08:00
python curses 用这个

或者这个 case (来自 StackOverflow )
import sys
import time

for i in range(20):
sys.stdout.write("\r{0}>".format("="*i))
sys.stdout.flush()
time.sleep(0.5)
DuckJK
2016-07-13 15:27:44 +08:00
@pixstone \r 只会对当前那一行有作用,所以在加了\n 只会就会失效。
@felixzhu 这个没问题,\033[nA 是光标上移 n 行,可以先计算有多少输出数据,然后再上移输出。另外找了下这个是 \033[2J 清屏,非常感谢。

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

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

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

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

© 2021 V2EX