Phi*_*Guo 0 python console tqdm
我一直在尝试将tqdm Python 库中的tqdm进度条保存到文本文件中。我尝试将sys.stdout和sys.stderr重定向到一个文件:
但是,仅保存stdout的输出(例如打印语句),而不保存tqdm进度条。进度条保留在控制台中。
如果我重定向sys.stderr到文件然后我得到tqdm文件。
import tqdm\nimport time\nimport sys\n\nfh = open(\'output.txt\', \'w\') # one file for both `stdout` and `stderr`\n\noriginal_stderr = sys.stderr\nsys.stderr = fh\n#original_stdout = sys.stdout\n#sys.stdout = fh\n\nitems = 100\n\nfor i in tqdm.tqdm(range(items)):\n time.sleep(0.1)\n\nsys.stderr = original_stderr\n#sys.stdout = original_stdout\n\nfh.close()\nRun Code Online (Sandbox Code Playgroud)\n或者我可以使用tqdm(..., file=fh)
import tqdm\nimport time\n\nfh = open(\'output.txt\', \'w\')\n\nitems = 100\n\nfor i in tqdm.tqdm(range(items), file=fh):\n time.sleep(0.1)\n\nfh.close()\nRun Code Online (Sandbox Code Playgroud)\n但是这个文件有这样的内容
\n 0%| | 0/100 [00:00<?, ?it/s]\n 1%| | 1/100 [00:00<00:09, 9.98it/s]\n 2%|\xe2\x96\x8f | 2/100 [00:00<00:09, 9.84it/s]\n 3%|\xe2\x96\x8e | 3/100 [00:00<00:09, 9.87it/s]\n 4%|\xe2\x96\x8d | 4/100 [00:00<00:09, 9.90it/s]\n 5%|\xe2\x96\x8c | 5/100 [00:00<00:09, 9.92it/s]\n 6%|\xe2\x96\x8c | 6/100 [00:00<00:09, 9.93it/s]\n 7%|\xe2\x96\x8b | 7/100 [00:00<00:09, 9.93it/s]\n 8%|\xe2\x96\x8a | 8/100 [00:00<00:09, 9.94it/s]\n 9%|\xe2\x96\x89 | 9/100 [00:00<00:09, 9.94it/s]\n 10%|\xe2\x96\x88 | 10/100 [00:01<00:09, 9.94it/s]\n 11%|\xe2\x96\x88 | 11/100 [00:01<00:08, 9.94it/s]\n 12%|\xe2\x96\x88\xe2\x96\x8f | 12/100 [00:01<00:08, 9.94it/s]\n 13%|\xe2\x96\x88\xe2\x96\x8e | 13/100 [00:01<00:08, 9.95it/s]\n 14%|\xe2\x96\x88\xe2\x96\x8d | 14/100 [00:01<00:08, 9.95it/s]\n 15%|\xe2\x96\x88\xe2\x96\x8c | 15/100 [00:01<00:08, 9.95it/s]\n 16%|\xe2\x96\x88\xe2\x96\x8c | 16/100 [00:01<00:08, 9.94it/s]\n 17%|\xe2\x96\x88\xe2\x96\x8b | 17/100 [00:01<00:08, 9.95it/s]\n 18%|\xe2\x96\x88\xe2\x96\x8a | 18/100 [00:01<00:08, 9.95it/s]\n 19%|\xe2\x96\x88\xe2\x96\x89 | 19/100 [00:01<00:08, 9.95it/s]\n 20%|\xe2\x96\x88\xe2\x96\x88 | 20/100 [00:02<00:08, 9.95it/s]\n 21%|\xe2\x96\x88\xe2\x96\x88 | 21/100 [00:02<00:07, 9.95it/s]\nRun Code Online (Sandbox Code Playgroud)\ntqdm使用 char\\r移动到行首并打印新文本。
\n我在 Linux 上的编辑器将其显示为新行,但在 Windows 上您可能会在一行中看到它,例如
0%| | 0/100 [00:00<?, ?it/s]\\r 1%| | 1/100 [00:00<00:09, 9.98it/s]\\r 2%|\xe2\x96\x8f | 2/100 [00:00<00:09, 9.84it/s]\nRun Code Online (Sandbox Code Playgroud)\n如果你想获得最终价值it/s那么你宁愿使用time.time()手动使用和计算它。
import tqdm\nimport time\nimport sys\n\nitems = 100\n\nstart = time.time()\n\nfor i in tqdm.tqdm(range(items)):\n time.sleep(0.1)\n\nend = time.time()\n\ndiff = end-start\nitems_per_second = items/diff\n\nprint(f\'time: {diff:.2f} s | {items_per_second:.2f} it/s\')\nRun Code Online (Sandbox Code Playgroud)\n结果:
\ntime: 10.09 s | 9.91 it/s\nRun Code Online (Sandbox Code Playgroud)\n您可以使用fh.write()或print(..., file=fh)或 重定向将其写入文件sys.stdout当您在控制台/终端中运行代码时,
python script.py > output.txt\nRun Code Online (Sandbox Code Playgroud)\n