Python 将回车写入pycharm控制台时,是否删除整行?

Python 将回车写入pycharm控制台时,是否删除整行?,python,console-application,pycharm,carriage-return,Python,Console Application,Pycharm,Carriage Return,我有一个Python程序,它广泛使用换行符来产生更新控制台行(特别是进度条)的效果 当我试着在PyCharm中调试代码时,我看到进度条直到完成后才被打印出来 进一步检查后发现,当打印回车(\r)时,整行被删除 因为库本身编写的字符串的形式是({line}\r),所以我总是得到一个空行 有没有办法用PyCharm解决这个问题?目前我要做的是用一个记录当前行并在收到回车后重新打印的版本来替换stdout。然而,我宁愿有一个简单的方法来做这件事 示例代码: import sys sys.stdout.

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


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

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

打印每一行,起始处有回车符,默认结尾='\n'。虽然我没有做很多测试,但我不需要冲洗

print('\rxxx', end='')
# sys.stdout.flush()
time.sleep(1)
继续这样

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

print('\ryyy', end='')
time.sleep(1)
要保留最后一次打印输出,请保留默认结束

print('\r===')
希望这对你有用


Frank

注意打印间隔时间短和打印字符串长度短,打印可能很棘手,一行只打印几个值

要解决可在白色字符后添加第二个字符的问题,请执行以下操作:

for i in range(10):
    print("\r \r{0}".format(str(i)), end='')
    time.sleep(0.1)

我对类似问题的解决方案:

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

您是否有在PyCharm中复制此行为的代码段?我认为IntelliJ IDE控制台的真正目的不在于输出的顺序转储,而不是终端模拟器,因此处理其行为似乎是浪费时间。在PyCharm控制台中是否需要此功能?@NathanielFord我已用代码更新了问题,以重现问题。@pvg我想在PyCharm中进行调试。。。要做到这一点,我需要使用pycharm控制台。我不知道pycharm控制台的行为如何阻止您进行调试。基本上,pycharm控制台的行为不像终端仿真器。哦,好吧。如果要调试该行为,请使用终端。如果您只想调试输出,pycharm控制台可以正常工作。