“\b”在PyCharm控制台中无法打印退格符

8

我正在尝试更新PyCharm控制台中的最后一行。比如说,我打印了a,然后我想把它改成c。但是,我遇到了以下问题。当我运行:

print 'a\bc'

它打印出来了

a c

期望的输出结果(也是我在Windows控制台中看到的)为:

c

有没有办法在PyCharm的控制台中将光标向后移动?或者删除整行?

https://dev59.com/HlDTa4cB1Zd3GeqPJ4mJ - santosh-patil
@sk4x0r,我看不出它如何对我有帮助。 - Yariv
@InbarRose,请看附加细节。 - Yariv
你使用的是哪个版本的Python? - Inbar Rose
2
http://youtrack.jetbrains.com/issue/PY-11300 - Ignacio Vazquez-Abrams
显示剩余7条评论
4个回答

6
这不是一个错误,而是 PyCharm 和 IDLE shell 中交互式控制台的限制。
在 Windows 命令提示符或 Linux shell 中使用时,“\b”字符被解释为退格并在解析时实现它。然而,在 PyCharm 和 IDLE 的交互式控制台中,“\b”字符和许多其他字符都被禁用,而代之以 ASCII 字符表示(在大多数情况下是一个空格)。

不在交互式 shell 中。 - Inbar Rose

3

\r 是有效的。我知道这是 ASCII 回车符,但我将其用作解决方法。

print("\ra")
print("\rc")

将在控制台中输出c

顺便说一下,退格键 ASCII 字符。


1
在我的Windows 10系统下,使用PyCharm 2019.1.2对我无效。 - Franz

3

2
我刚在PyCharm(2019.1)中遇到了同样的问题,并偶然看到了这篇文章。事实证明,如果您使用sys.stdout.write函数而不是print,则可以使用\b字符。我无法在PyCharm中使用print函数使上述任何示例正常工作。
假设我不需要超过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函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接