您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

PyCharm Python控制台-在同一行上打印无法正常工作

PyCharm Python控制台-在同一行上打印无法正常工作

您需要控制对stdout的写入和刷新。因此,ma3oun给出的链接很有价值。不幸的是,PyCharm控制台的工作原理不同于命令行。有关其工作方式的问题,应直接联系PyCharm团队,并可能要求他们更改此行为。

无论如何,解决问题的方法是在执行写操作之前添加\ r:

import sys
import time

for i in range(10):
    sys.stdout.write("\r{0}".format(str(i)))
    sys.stdout.flush()
    time.sleep(1)

但是,对于较短的睡眠时间(例如0.1),刷新短缓冲区存在问题。对于每次刷新,您获得的不仅仅是打印的一个写入值。作为一种解决方法,我发现您可以添加一个\ r:

for i in range(10):
    sys.stdout.write("\r \r {0}".format(str(i)))
    sys.stdout.flush()
    time.sleep(0.1)

这将强制控制台仅显示一个写入值,但是您会在两次显示之间失去一些值,因为它看起来像刷新速率慢于0.1秒。

我的进度条解决方案已正确显示在PyCharm控制台中:

import sys
import time

progressVis = {0: '          ', 1: '-         ', 2: '--        ', 3: '---       ', 4: '----      ', 5: '-----     ',
               6: '------    ', 7: '-------   ', 8: '--------  ', 9: '--------- ', 10: '----------'}

size = 20
for i in range(0, size):
    percent = int((float(i + 1) / size) * 10)
    str1 = "\r \r [{0}] {1}/{2} {3}%".format(progressVis[percent],
                                                 i + 1, size,
                                                 ((i + 1) * 100 / size))
    sys.stdout.write(str1)
    sys.stdout.flush()
    time.sleep(0.1)
python 2022/1/1 18:41:35 有262人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶