lenooh satisfied 我的查询。我在搜索“python suppress newline”时发现了这篇文章。我在 Raspberry Pi 上使用 IDLE 3 为 PuTTY 开发 Python 3.2。
我想在 PuTTY 命令行上创建一个进度条。我不希望页面滚动。我想要一条水平线来让用户放心,让用户不会因为程序没有停止运行,也没有在快乐的无限循环中被送去吃午饭而感到害怕——作为请求‘别管我,我做得很好,但是这个可能需要一些时间。交互式消息 - 就像文本中的进度条。
print('Skimming for', search_string, '\b! .001', end='') 通过准备下一个屏幕写入来初始化消息,这将打印三个退格作为⌫⌫⌫ rubout,然后是一个句点,擦除“001”并延长句点行。
在search_string parrots 用户输入之后,\b! 修剪我的search_string 文本的感叹号以回到print() 否则强制的空间,正确放置标点符号。后面是一个空格和我正在模拟的“进度条”的第一个“点”。
不必要地,该消息还带有页码(格式为长度为 3 的前导零),以通知用户正在处理进度,这也将反映我们稍后将构建的周期数向右。
import sys
page=1
search_string=input('Search for?',)
print('Skimming for', search_string, '\b! .001', end='')
sys.stdout.flush() # the print function with an end='' won't print unless forced
while page:
# some stuff…
# search, scrub, and build bulk output list[], count items,
# set done flag True
page=page+1 #done flag set in 'some_stuff'
sys.stdout.write('\b\b\b.'+format(page, '03')) #<-- here's the progress bar meat
sys.stdout.flush()
if done: #( flag alternative to break, exit or quit)
print('\nSorting', item_count, 'items')
page=0 # exits the 'while page' loop
list.sort()
for item_count in range(0, items)
print(list[item_count])
#print footers here
if not (len(list)==items):
print('#error_handler')
进度条在sys.stdout.write('\b\b\b.'+format(page, '03')) 行中。首先,要向左擦除,它将光标移到三个数字字符上,其中 '\b\b\b' 作为 ⌫⌫⌫ rubout 并删除一个新句点以添加到进度条长度。然后它会写出到目前为止它已经前进到的页面的三位数字。因为sys.stdout.write() 等待一个完整的缓冲区或输出通道关闭,所以sys.stdout.flush() 强制立即写入。 sys.stdout.flush() 内置在 print() 的末尾,被 print(txt, end='' ) 绕过。然后代码循环执行其平凡的时间密集型操作,同时它不再打印任何内容,直到它返回此处擦除三个数字,添加一个句点并再次写入三个数字,递增。
擦除和重写的三个数字绝不是必要的 - 它只是一个繁荣的例证 sys.stdout.write() 与 print()。您可以很容易地用句号作为底数,而忘记三个花哨的反斜杠-b ⌫ 退格(当然也不能写格式化的页数),只需每次打印句号栏长一长 - 没有空格或换行符,只使用sys.stdout.write('.'); sys.stdout.flush() 对。
请注意,Raspberry Pi IDLE 3 Python shell 不会将退格视为 ⌫ rubout,而是打印一个空格,从而创建一个明显的分数列表。