我正在尝试更新 PyCharm 控制台中的最后一行。说,我打印a
,然后我想将其更改为c
. 但是,我遇到以下问题。当我运行时:
print 'a\bc'
它打印
a c
而所需的输出(这也是我在 Windows 控制台中看到的)是:
c
有没有办法将光标移回 PyCharm 的控制台?或者也许删除整行?
这不是错误,这是在 PyCharm 和 IDLE shell 中发现的交互式控制台的限制。
当使用 windows 的命令提示符或 linux shell 时 -\b
字符被解释为退格并在解析时实现 - 但是,在 PyCharm 和 IDLE 的交互式控制台中,\b
字符和许多其他字符被禁用,而您只需获取字符的 ASCII 表示(大多数情况下为空格)。
这是一个已知的错误:http: //youtrack.jetbrains.com/issue/PY-11300
如果您关心这一点,请在错误跟踪器上注册一个帐户并上传错误以给予更多关注。
我刚刚在 PyCharm (2019.1) 中遇到了同样的问题,偶然发现了这篇文章。事实证明,\b
如果您使用sys.stdout.write
函数而不是print
. 我无法使用该print
函数在 PyCharm 中获得上述任何示例。
假设我不需要超过 100 个字符,以下是我更新代码中最后一行文本的方法:
# Initialize output line with spaces
sys.stdout.write(' ' * 100)
# Update line in a loop
for k in range(10)
# Generate new line of text
cur_line = 'foo %i' % k
# Remove last 100 characters, write new line and pad with spaces
sys.stdout.write('\b' * 100)
sys.stdout.write(cur_line + ' '*(100 - len(cur_line)))
# ... do other stuff in loop
这应该生成“foo 1”,然后替换为“foo 2”、“foo 3”等,所有这些都在同一行上,并覆盖每个字符串输出的先前输出。我使用空格来填充所有内容,因为不同的程序以不同的方式实现退格字符,有时它会删除字符,有时它只会向后移动光标,因此仍然需要覆盖新文本。
我必须感谢 Keras 库的这个解决方案,它在学习过程中正确更新了控制台输出(包括 PyCharm)。我发现他们sys.stdout.write
在进度条更新代码中使用了该功能。
\r
作品。我知道这是 ASCII 回车,但我将其用作解决方法
print("\ra")
print("\rc")
将在控制台中的c中产生
顺便说一句,退格是一个 ASCII 字符