【问题标题】:why does the escape code '\r' cause the console to create a sub-console?为什么转义码 '\r' 会导致控制台创建子控制台?
【发布时间】:2020-01-13 15:51:53
【问题描述】:

我正在测试print() 函数并尝试了这个:

>>> import sys
>>> for i in range(3):
        print('\r',i,end='',file=sys.stdout)

我希望命令将 0 然后 1 然后 2 打印到控制台,每个都替换之前的一个,但结果是一个如下所示的输入请求:

2 >>> 

为什么会发生这种情况,我该如何解决?

编辑:更好的例子

【问题讨论】:

  • 如果你想将“test”打印到控制台,print('test')有什么问题?我不确定“修复它”在这里是什么意思。你期待什么?
  • 说我之前打印了一行,但想删除它。
  • 不用file=sys.stdout参数,直接用print('test')
  • 那么print('\rtest') 做你想做的事吗?

标签: python python-3.x


【解决方案1】:

考虑一个更简单的例子:

>>> print('test')
test
>>>

现在添加end='' 来禁止换行:

>>> print('test', end='')
test>>>

如果没有换行符,则在字符串test 之后立即显示提示;光标从未移动到下一行。

现在添加回车:

>>> print('\r', 'test', end='')
 test>>>

\r 并没有真正做任何事情:它使光标移动到当前行的开头,但光标已经在那里。但是,print 在打印下一个字符串之前确实会输出一个空格,并且和以前一样,不会打印换行符来将光标移动到下一行。

这是一个例子,\r确实有效果。比较

>>> print('foo', 'bar', end='')
foo bar>>>

>>> print('123456789', '\r', 'bar', end='')
 bar>>> 9

123456789 已打印,但 \r 移动光标,以便空格和 bar 覆盖 1234。解释器本身输出的提示符和后面的空格会覆盖5678

【讨论】:

  • 但为什么它会在控制台打印bar>>> 而不仅仅是bar
  • >>> 是解释器下一个提示的一部分。因为您指定了end = "",所以光标将位于字符串的末尾,这就是提示符所在的位置。如果您希望它出现在下一行(可能像您习惯的那样),那么您需要打印最后一个新行,将光标放在下一行的开头。
  • 谢谢,回答了我的问题
猜你喜欢
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多