我有一个Python程序,它广泛使用换行符来产生更新控制台行(特别是进度条)的效果。
当尝试在PyCharm中调试代码时,我发现进度条在完成之前不会被打印。
经过进一步检查后发现,当打印回车(\r
)时,整行都会被删除。
因为库本身写的是表单({line}\r
)的字符串,所以我总是得到一个空行。
有没有办法用PyCharm解决这个问题?目前我正在做的是用记录当前行的版本替换stdout
并在收到回车后重新打印它。但是,我更倾向于采用一种简单的方法来做到这一点。
示例代码:
import sys
sys.stdout.write('xxx')
sys.stdout.flush()
time.sleep(1)
sys.stdout.write('\rZZ')
sys.stdout.flush()
time.sleep(1)
sys.stdout.write('yyy\r')
sys.stdout.flush()
time.sleep(1)
print ('===')
我的跑步看起来像这样:
1.' xxx'印刷品
[1秒后]
2.' ZZ'印刷品
[1秒后]
3.该行被删除
[1秒后]
4.' ==='打印,程序终止
运行此脚本时,在调试和运行控制台中都会发生这种情况。
答案 0 :(得分:4)
我最近遇到了同样的问题,并找到了解决方案。 答案实际上在你的帖子中。如你所说,回车删除整行。要避免此问题,请仅在打印新行时打印回车符,如下所示:
在开始时使用回车符打印每一行,没有默认的结尾='\ n'。不需要冲洗,但我没有做太多测试。
print('\rxxx', end='')
# sys.stdout.flush()
time.sleep(1)
继续这样......
print('\rZZ', end='')
time.sleep(1)
print('\ryyy', end='')
time.sleep(1)
要保留上次打印输出,请保留默认结束。
print('\r===')
希望这适合你。
谢
答案 1 :(得分:1)
请注意打印时间短,打印字符串长度短,打印效果可能很难,并且会在一行中打印少量值。
要解决此问题,您可以在白色字符后添加第二个\ r \ n:
for i in range(10):
print("\r \r{0}".format(str(i)), end='')
time.sleep(0.1)
我对类似问题的解决方案:https://stackoverflow.com/a/44524422/6857902
答案 2 :(得分:1)
该错误仍然处于活动状态,并报告为here。现在,如果您使用“运行”>“配置”>“在输出控制台中模拟终端”,则回车符将按预期运行。