将回车写入pycharm控制台时,整行都被删除了?

时间:2016-01-12 18:42:50

标签: python console-application pycharm carriage-return

我有一个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.' ==='打印,程序终止

运行此脚本时,在调试和运行控制台中都会发生这种情况。

3 个答案:

答案 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。现在,如果您使用“运行”>“配置”>“在输出控制台中模拟终端”,则回车符将按预期运行。