直接用这个好了
import time
def main():
content = '北京欢迎你为你开天辟地..........'
while True:
print('\r' + ' ' * 20, end = '')
print('\r' + content, end = '')
time.sleep(0.2)
content = content[1:] + content[0]
if __name__ == "__main__":
main()
原回答:
import time
for i in range(0, 10):
print('\r\x1b[K', end = '')
print('\r' + '#' * (11 - i), end = '')
time.sleep(1)
print函数可以指定以什么字符串结尾, 默认是"\n", 这里为了不换行, 设这个参数为空字符串.print函数的文档
2. 两个控制符: '\r'(CR)是回车(定位至当前行开头), '\n'(LF)是换行(定位至下一行). 你可以理解为一个控制光标向左, 一个向下. 在类Unix系统下面, '\n'是定位至下一行的开头, 所以每一行都以'\n'(CR)结尾. 但是上古时期的DOS, '\n'仅表示定位下移一行, 因此需要配合'\r'来定位至该行开头. 这也是Windows下面默认行尾是'\n\r'(CRLF)的原因.
手头有个8086上汇编的有趣例子, 看看在每一行结尾输出不同行尾符的不同情况:这是行尾是CRLF的情况
现在注释掉输出'\r'的部分:懒得等它运行完了
当然这是上古时期的特性了(逃
扯远了, 回到代码上来.
我们如果要做到这个所谓的跑马灯的效果, 每次输出前需要做下面的事情:重新定位至这一行开头.
清除之前的输出结果.
同时需要保证:
3. 仅输出自己想要输出的内容, 不附加换行.
3的实现(两种方式):
print('xxx', end = '')
或者
import sys
sys.stdout.write('xxx')
sys.stdout.flush()
1的实现:借助'\r'
2的实现(同样两种方式):
print(' ' * 10, end = '')
输出一堆空格把之前的内容替换掉 (需要计算需要多少空格)
或者
print('\x1b[K', end = '')
'\x1b'对应的ASCII码是ESC , 它配合后面的一个字符, 作用是设置给终端设置输出属性.
'\x1b[K'的含义是清除后面的内容.人类身份验证 - SegmentFaultsegmentfault.com
比如print("\x1b[34mblue\x1b[0m") 可以输出蓝色字体(如果支持的话
最后, 如果有兴趣的话, 可以看看这个项目https://github.com/verigak/progressgithub.com
如果想偷懒的话, 把你代码里的那个'cls'换成'clear', 这才是mac下的清屏指令. (印象中好像是