7

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

print 'a\bc'

它打印

a c

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

c

有没有办法将光标移回 PyCharm 的控制台?或者也许删除整行?

4

4 回答 4

5

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

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

于 2013-11-12T09:56:48.617 回答
3

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

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

于 2013-11-12T10:14:59.937 回答
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在进度条更新代码中使用了该功能。

于 2020-01-02T01:10:47.010 回答
2

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

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

将在控制台中的c中产生

顺便说一句,退格一个 ASCII 字符

于 2016-05-26T12:09:16.930 回答