sys.stdout.write() 在交互模式下表现不同
sys.stdout.write() Acting different in interactive mode
我有代码:
import sys
import time
for i in range(10):
sys.stdout.write("\r Loading: {}".format(i))
sys.stdout.flush()
time.sleep(0.5)
当我 运行 python3 dynamic_print.py
时,它工作得很好,但是当我通过键入 python3
启动交互式解释器时,将上面的代码复制并 运行 到其中,我得到输出:
Loading: 012
Loading: 112
Loading: 212
Loading: 312
Loading: 412
Loading: 512
Loading: 612
Loading: 712
Loading: 812
Loading: 912
最后两位数 12
,每次我 运行 时都会更新(上次我 运行 时是 11
)。为什么它的行为不同以及如何缓解这种情况?
12
是write
的return值,即写入的字符数。在交互模式下打印出来,然后换行
要解决此问题,您可以向解释器表明您对此值不感兴趣(例如使用 _ = stdout.write(s)
),或者您可以将所有内容放入函数中,从而使其远离 REPL
我建议做后者,例如类似于:
def looper(n):
for i in range(n):
sys.stdout.write("\r Loading: {}".format(i))
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.write("\n")
然后调用为 looper(10)
首先你会得到不同的输出,因为当你 运行 python3 dynamic_print
python 编译你的文件并为你的 python 代码(.pyc)生成字节码时在 python 运行 时间内执行。
当您在控制台上使用 python3 时,它会在您输入命令时对其进行解释。因此,您不能仅通过 清除 python 控制台中生成的输出。这就是为什么您每次都在新行中获得输出的原因。
另一件需要注意的事情是 python3 print()
和 sys.stdout.write()
之间的区别是它们每个都有 return 类型。 print()
returns none 和 sys.stdout.write
returns 字符串的长度。参考 to this answer。
return 类型是获得额外 12.
的原因
我有代码:
import sys
import time
for i in range(10):
sys.stdout.write("\r Loading: {}".format(i))
sys.stdout.flush()
time.sleep(0.5)
当我 运行 python3 dynamic_print.py
时,它工作得很好,但是当我通过键入 python3
启动交互式解释器时,将上面的代码复制并 运行 到其中,我得到输出:
Loading: 012
Loading: 112
Loading: 212
Loading: 312
Loading: 412
Loading: 512
Loading: 612
Loading: 712
Loading: 812
Loading: 912
最后两位数 12
,每次我 运行 时都会更新(上次我 运行 时是 11
)。为什么它的行为不同以及如何缓解这种情况?
12
是write
的return值,即写入的字符数。在交互模式下打印出来,然后换行
要解决此问题,您可以向解释器表明您对此值不感兴趣(例如使用 _ = stdout.write(s)
),或者您可以将所有内容放入函数中,从而使其远离 REPL
我建议做后者,例如类似于:
def looper(n):
for i in range(n):
sys.stdout.write("\r Loading: {}".format(i))
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.write("\n")
然后调用为 looper(10)
首先你会得到不同的输出,因为当你 运行 python3 dynamic_print
python 编译你的文件并为你的 python 代码(.pyc)生成字节码时在 python 运行 时间内执行。
当您在控制台上使用 python3 时,它会在您输入命令时对其进行解释。因此,您不能仅通过 清除 python 控制台中生成的输出。这就是为什么您每次都在新行中获得输出的原因。
另一件需要注意的事情是 python3 print()
和 sys.stdout.write()
之间的区别是它们每个都有 return 类型。 print()
returns none 和 sys.stdout.write
returns 字符串的长度。参考 to this answer。
return 类型是获得额外 12.