我想运行一个脚本,它基本上显示如下内容:
Installing XXX... [DONE]
现在,我使用print在函数成功后打印整行。但是,现在我希望它首先打印"installing xxx…",在函数运行之后,添加"done"标记;但是在同一行。
有什么想法吗?
如何防止python print添加换行符或空格的可能副本?
这个问题的答案没有提到,有时候你想清除行,请参见:stackoverflow.com/questions/45263205
您可以使用print语句来执行此操作,而无需导入sys。
def install_xxx():
print"Installing XXX... ",
install_xxx()
print"[DONE]"
号
print行末尾的逗号防止print发出新的行(您应该注意,输出末尾将有一个额外的空间)。
python 3解决方案由于上面的内容在python 3中不起作用,您可以这样做(同样,不导入sys):
def install_xxx():
print("Installing XXX... ", end="", flush=True)
install_xxx()
print("[DONE]")
print函数接受默认为"
"的end参数。将其设置为空字符串可防止它在行尾发出新行。
它工作得很好。到目前为止只看到过stdout解决方案。很高兴知道这一点。
如果您同时拥有打印和耗时的操作(所有操作都在同一功能/缩进级别),则此操作不起作用。在操作开始之前,根本没有输出,完成之后,输出显示为整体。
这可能更像是由操作系统为整个进程执行的输出缓冲的函数,而这不是特定于Python的问题。请参阅stackoverflow.com/questions/107705了解特定于python的解决方法。
如果没有换行符,可能需要显式刷新缓冲区。在python 3中使用print("...", end="", flush=True),在python 2中添加一个sys.stdout.flush()调用。
在python 3.x中,您需要在末尾添加一个"r",以替换打印行,而不是附加到它的末尾print("Progress: {}%".format(var), end="
", flush=True)。
如果要覆盖该行,则不要将end=""放在end="
"上,以便光标再次开始。或者在python 2中,将"
"附加到字符串中。注意离开克鲁夫特的短线。可能想用str.ljust(longest)填充。
为了防止有人偶然发现这一点:您还必须调整打印字符串的长度以适应终端线。否则,该线程中的任何方法都不会工作(至少在MacOS 10.13上不工作)。;)
您可以简单地使用:
print 'something