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

Tom*_*omM 8 python console-application carriage-return pycharm

我有一个 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 ('===')
Run Code Online (Sandbox Code Playgroud)

我的运行看起来像这样:
1. 'xxx' 打印
[1 秒后]
2. 'ZZ' 打印
[1 秒后]
3. 该行被删除
[1 秒后]
4. '=== 打印然后程序终止

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

Bus*_*man 9

我最近遇到了同样的问题,并找到了解决方案。答案实际上在您的帖子中。正如你所说,回车删除整行。为避免此问题,请仅在打印新行时打印回车,如下所示:

打印每一行的开头带有回车符,并且没有默认的 end='\n'。不需要冲洗,虽然我没有做太多测试。

print('\rxxx', end='')
# sys.stdout.flush()
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

继续这样...

print('\rZZ', end='')
time.sleep(1)

print('\ryyy', end='')
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

要保留上次打印输出,请保留默认结尾。

print('\r===')
Run Code Online (Sandbox Code Playgroud)

希望这对你有用。

坦率


小智 5

该错误仍处于活动状态,并已在此处报告。现在,如果您使用“运行”>“配置”>“在输出控制台中模拟终端”,回车将按预期运行。