我正在使用tqdmPython在我们的脚本中显示控制台进度条.但是,我必须将调用print消息的函数调用到控制台,而且我无法更改.通常,在控制台中显示进度条的同时写入控制台会使显示屏变得如此:
from time import sleep
from tqdm import tqdm
def blabla():
print "Foo blabla"
for k in tqdm(range(3)):
blabla()
sleep(.5)
Run Code Online (Sandbox Code Playgroud)
这会创建输出:
0%| | 0/3 [00:00<?, ?it/s]Foo
blabla
33%|###########6 | 1/3 [00:00<00:01, 2.00it/s]Foo
blabla
67%|#######################3 | 2/3 [00:01<00:00, 2.00it/s]Foo
blabla
100%|###################################| 3/3 [00:01<00:00, 2.00it/s]
Run Code Online (Sandbox Code Playgroud)
根据tqdm该方法的文档tqdm.write()提供了一种在不破坏显示的进度条的情况下将消息写入控制台的方法.因此,此片段提供了正确的输出:
from time import sleep
from tqdm import tqdm
def blabla():
tqdm.write("Foo blabla")
for k in tqdm(range(3)):
blabla()
sleep(.5)
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
Foo blabla
Foo blabla
Foo blabla
100%|###################################| 3/3 …Run Code Online (Sandbox Code Playgroud) 答案请参见:
\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)