\r 将字符返回到终端行的开头
所以它会覆盖字符串上已经存在的内容。
end='' print 命令的默认值是end='\n'(所以你不需要在每个 print 语句后添加新行)
因此,通过不在交互式 shell 中打印新行,您只是将光标放在终端上打印的内容的末尾
>>> print("Hello", end='')
Hello>>>
>>> print("Hello\rI will override", end='')
I will override>>>
如果你正常打印,这就是为什么你的下一个 shell 命令不会出现在字符串中间。
>>> print("Hello", end='\n')
Hello
>>> print("Hello")
Hello
>>>
>>> print("""Hello
... this is a multi line
... \rexample""")
Hello
this is a multi line
example
>>>
那么为什么从脚本运行它时会有所不同?简短的回答不是。这只是您使用的终端如何显示输出的一点点:
来自 bash 的示例:
pi@raspberrypi:~ $ cat test.py
carriage_return = "I will use a carriage\rreturn"
print(carriage_return)
print(carriage_return, end='\n')
print(carriage_return, end='')
pi@raspberrypi:~ $ python test.py
return use a carriage
return use a carriage
returnpi@raspberrypi:~ $
所以从 bash 开始,它只是覆盖了 $USER@$HOSTNAME 打印的其余部分
来自 Windows 终端的相同文件:
Desktop> python .\Stackoverflow.py
return use a carriage
return use a carriage
return use a carriage
Desktop>
您看到“return”的原因在于您使用的 shell 决定何时开始换行。
希望这有助于清除它。