'\ b'不会在PyCharm控制台中打印退格

时间:2013-11-12 09:18:37

标签: python console pycharm backspace

我正在尝试更新PyCharm控制台中的最后一行。说,我打印a,然后我想将其更改为c。但是,我遇到了以下问题。我跑的时候:

print 'a\bc'

打印

a c

虽然所需的输出(也是我在Windows控制台中看到的)是:

c

有没有办法在PyCharm的控制台中将光标移回?或者可能删除整行?

4 个答案:

答案 0 :(得分:4)

这不是一个错误,这是在PyCharm和IDLE shell中发现的交互式控制台的限制。

当使用windows的命令提示符或linux shell时,\b字符被解释为退格并在解析时实现 - 但是,在PyCharm和IDLE的交互式控制台中{{1字符和许多其他字符都被禁用,而你只需获得字符的ASCII表示(在大多数情况下为空格)。

答案 1 :(得分:3)

这是一个已知的错误:http://youtrack.jetbrains.com/issue/PY-11300

如果您关心这一点,请在错误跟踪器上获取一个帐户并上传错误,以便更多关注。

答案 2 :(得分:2)

我刚在《 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函数。

答案 3 :(得分:1)

\r有效。我知道这是ASCII回车,但我用它作为解决方法

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

将在控制台

中的 c 中产生

顺便说一下,退格 是一个ASCII字符