首页 > 解决方案 > Python回车\ r选择性地不起作用

问题描述

所以我正在处理一个加载栏,该栏应该扩展到行尾然后消失(全部在 1 行),就好像它正在离开屏幕一样。回车在我的第一个 while 循环中起作用(当加载条进入屏幕时)。我的问题是当它应该“离开屏幕”时,'/r' 的东西不会返回马车并将每个条形迭代放在一个新的行上,从而破坏效果。这可以在我提供的代码片段的第二个 while 循环中找到:

import time

s=1
f=1
while True:
    while s <= 128:
        loadbar = ('█'*s)
        print(loadbar, end='\r')
        time.sleep(0.01)
        s=s+1
    while f <= 128:
        loadbar = ' ' + loadbar[:-1]
        print(loadbar, end='\r')
        time.sleep(0.01)
        f=f+1
    s=1
    f=1

我到处寻找类似的问题,而且我正在通过批处理文件从 python 3 运行脚本,所以我知道 IDLE Shell 没有问题,因为我知道 IDLE Shell 通常会忽略回车(至少从经验来看)。如果需要任何进一步的细节,请告诉我,非常感谢所有帮助!

标签: python

解决方案


正如评论中所建议的那样,问题在于您的终端大小可能不是 128。最好不要猜到正确的数字。

改用os.get_terminal_size()函数或shutil.get_terminal_size()函数来告诉你终端的大小:你得到宽度和高度,这里称为列和行,所以你需要的是列。

这是一个基于您发布的示例的示例工作代码,它应该可以满足您的需求(我刚刚切换'█'"="

import time
import os

s=1
f=1
n_cols = os.get_terminal_size().columns

while True:
    while s <= n_cols:
        loadbar = '='*s
        print(loadbar, end='\r')
        time.sleep(0.01)
        s=s+1
    while f <= n_cols:
        loadbar = ' '*f + "="*(n_cols-f)
        print(loadbar, end='\r')
        time.sleep(0.01)
        f=f+1
    s=1
    f=1

推荐阅读