【问题标题】:How do I print in Python 3.3.3 without carriage return?如何在没有回车的情况下在 Python 3.3.3 中打印?
【发布时间】:2014-01-01 01:56:52
【问题描述】:

首先,我不是在寻找如何与print(some_stuff, end="") 在同一行打印。

在 Python 2.7 中,您可以键入:

while True:
for i in ["/","-","|","\\","|"]:
    print "%s\r" % i,

它会在同一行的同一位置打印这 5 个字符,使您看起来像是在旋转一根杆(实际上您可以尝试一下)。 问题是,我不能在 Python 3.3 中做同样的事情,我已经尝试了几件事。 我的具体应用程序将是一个倒数计时器......代码是这样的:

import time
t = 120
while t > 0:
    t -= 1
    print("Time left till next update: %d seconds" % t)
    time.sleep(1)

输出应该是字符串,只有秒数会发生变化......希望有人可以帮助我。

【问题讨论】:

  • 我认为您在 2.7 代码中混淆了回车符 - \r,以及将光标带回同一行开头的东西 - 使用换行符 - \n会自动打印出来,并且会前进到下一行的开头。
  • 对不起,我不太明白你在说什么......(这里已经很晚了,我越来越困了:))但我的问题已经得到了回答。还是谢谢!
  • 您的问题是如何在没有回车的情况下进行打印。但这不是你想做的。 (如果是,请不要使用 \r。)
  • 其实,我的问题的重点是如何用回车来做到这一点...
  • 那么当问题的重点与此完全相反时,为什么标题如何没有回车呢?

标签: python string printing string-formatting python-3.3


【解决方案1】:

您使用end='\r' 作为关键字参数:

print("Time left till next update: %d seconds" % t, end='\r')

end 的默认值为 '\n',但您可以指定自己的。

【讨论】:

  • 我已经试过了。那段代码只是在另一个前面写一个句子......我正在使用 IDLE,以防万一......我得到的输出是:prntscr.com/2fiwvo
  • @RSerrao:我在终端中测试了它,它工作得很好。也许 IDLE 不再支持\r
  • 谢谢!那就是问题所在。刚刚在 Power Shell 中尝试过,它工作得很好。
  • 什么都没有改变。当我在 IDLE 中使用 2.7 和 3.3 在三个不同的平台上进行测试时,\r 在控制台窗口中打印一个换行符而不是回车符,而在输出窗口中什么也没有。
  • @RSerrao,当计数的长度发生变化时,不要忘记在行尾放一个空格以擦除最后一个字符。
【解决方案2】:

您也可以尝试较低级别,例如: os.write(fd, data) fd=1 (sys.stdin)。
注意data 必须是bytes (b'whatever data')。

import os, time
os.write(1, b'Time left till next update: 120 seconds'+b'\b'*8)
t=120
while t>0:
    time.sleep(1)
    t -= 1
    os.write(1, b'\b'*3+str(t).zfill(3).encode())
print()

它在终端中正常工作,但 Python IDLE 会忽略 '\r''\b'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2016-01-24
    • 2010-12-16
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多