当前位置:  开发笔记 > 编程语言 > 正文

如何在命令行应用程序中打印当前行?

如何解决《如何在命令行应用程序中打印当前行?》经验,为你挑选了5个好方法。

在Unix上,我可以使用\ r(回车)或\ b(退格)来打印在shell中已经可见的文本(即再次覆盖当前行).

我可以从Python脚本在Windows命令行中实现相同的效果吗?

我尝试了curses模块,但它似乎在Windows上不可用.



1> nosklo..:

是:

import sys
import time

def restart_line():
    sys.stdout.write('\r')
    sys.stdout.flush()

sys.stdout.write('some data')
sys.stdout.flush()
time.sleep(2) # wait 2 seconds...
restart_line()
sys.stdout.write('other different data')
sys.stdout.flush()


如果第二个数据比第一个短,则第一个数据的字符留在控制台上

2> Honghe.Wu..:
import sys 
import time

for i in range(10):
    print '\r',         # print is Ok, and comma is needed.
    time.sleep(0.3)
    print i,
    sys.stdout.flush()  # flush is needed.

如果在IPython-notebook上,就像这样:

import time
from IPython.display import clear_output

for i in range(10):
    time.sleep(0.25)
    print(i)
    clear_output(wait=True)

http://nbviewer.ipython.org/github/ipython/ipython/blob/master/examples/notebooks/Animations%20Using%20clear_output.ipynb



3> adho12..:

我知道这是旧的,但我想告诉我的版本(它在我的电脑上在cmd中运行,但不在空闲状态下)来覆盖Python 3中的一行:

>>> from time import sleep
>>> for i in range(400):
>>>     print("\r" + str(i), end="")
>>>     sleep(0.5)

编辑: 它适用于Windows和Ubuntu



4> Anubian Noob..:

我刚遇到这个问题.您仍然可以使用\r,即使在Windows命令提示符中,它只会将您带回到上一个换行符(\n).

如果您这样做:

cnt = 0
print str(cnt)
while True:
    cnt += 1
    print "\r" + str(cnt)

你会得到:

0
1
2
3
4
5
...

那是因为\r只回到最后一行.由于您已使用最后一个print语句编写了换行符,因此光标从新的空行开始到同一个新空行的开头.

为了说明,在打印第一个0后,您的光标将在此处:

0
| # <-- Cursor

当你\r,你去了线的开头.但是你已经开始了.

修复是为了避免打印\n字符,因此光标位于同一行并\r正确覆盖文本.你可以这样做print 'text',.逗号可以阻止打印换行符.

cnt = 0
print str(cnt),
while True:
    cnt += 1
    print "\r" + str(cnt),

现在它将正确地重写行.

请注意,这是Python 2.7,因此是print语句.



5> Fahri Güreşç..:

简单的方法:)

import sys
from time import sleep
import os

#print("\033[y coordinate;[x coordinateH Hello")
os.system('cls')
sleep(0.2)
print("\033[1;1H[]")
sleep(0.2)
print("\033[1;1H  []")
sleep(0.2)
print("\033[1;1H    []")
sleep(0.2)
print("\033[1;1H      []")
sleep(0.2)
print("\033[1;1H        []")
sleep(0.2)
print("\033[1;1H      []")
sleep(0.2)
print("\033[1;1H    []")
sleep(0.2)
print("\033[1;1H  []")
sleep(0.2)
print("\033[1;1H[]")
sleep(0.2)

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有