我已经在Python中看到了针对进度条的不同解决方案,但是简单的stdout解决方案对我的项目不起作用.我有多个类并使用"logging"模块将信息输出到STDOUT.我有一个功能,我想在一行显示进度条,每次刷新缓冲区.
简单进展的例子:
for i in range(100):
time.sleep(1)
sys.stdout.write("\r%d%%" %i)
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
当我尝试通过STDOUT写入然后刷新缓冲区时,缓冲区没有被刷新或者进度没有进入任何地方.我希望避免某种线程或复杂的过程来实现这一点.有人有一个首选的方法来实现这一目标吗?
答案请参见:
\n首先,我知道很多问题都与这个问题类似。\n但是在花了这么多时间之后,我现在向社区寻求帮助。
\n我开发并使用了一堆依赖于 的 python 模块tqdm。\n我希望它们可以在 Jupyter、控制台或 GUI 中使用。\n在 Jupyter 或控制台中一切正常:日志记录/打印和 tqdm 进度之间没有冲突酒吧。以下是显示控制台/Jupyter 行为的示例代码:
# coding=utf-8\nfrom tqdm.auto import tqdm\nimport time\nimport logging\nimport sys\nimport datetime\n__is_setup_done = False\n\n\ndef setup_logging(log_prefix):\n global __is_setup_done\n\n if __is_setup_done:\n pass\n else:\n __log_file_name = "{}-{}_log_file.txt".format(log_prefix,\n datetime.datetime.utcnow().isoformat().replace(":", "-"))\n\n __log_format = \'%(asctime)s - %(name)-30s - %(levelname)s - %(message)s\'\n __console_date_format = \'%Y-%m-%d %H:%M:%S\'\n __file_date_format = \'%Y-%m-%d %H-%M-%S\'\n\n root …Run Code Online (Sandbox Code Playgroud)