如果我将sys.stderr 重定向到文件,那么我会在文件中得到tqdm。
import tqdm
import time
import sys
fh = open('output.txt', 'w') # one file for both `stdout` and `stderr`
original_stderr = sys.stderr
sys.stderr = fh
#original_stdout = sys.stdout
#sys.stdout = fh
items = 100
for i in tqdm.tqdm(range(items)):
time.sleep(0.1)
sys.stderr = original_stderr
#sys.stdout = original_stdout
fh.close()
或者我可以使用tqdm(..., file=fh)
import tqdm
import time
fh = open('output.txt', 'w')
items = 100
for i in tqdm.tqdm(range(items), file=fh):
time.sleep(0.1)
fh.close()
但是这个文件有这样的东西
0%| | 0/100 [00:00<?, ?it/s]
1%| | 1/100 [00:00<00:09, 9.98it/s]
2%|▏ | 2/100 [00:00<00:09, 9.84it/s]
3%|▎ | 3/100 [00:00<00:09, 9.87it/s]
4%|▍ | 4/100 [00:00<00:09, 9.90it/s]
5%|▌ | 5/100 [00:00<00:09, 9.92it/s]
6%|▌ | 6/100 [00:00<00:09, 9.93it/s]
7%|▋ | 7/100 [00:00<00:09, 9.93it/s]
8%|▊ | 8/100 [00:00<00:09, 9.94it/s]
9%|▉ | 9/100 [00:00<00:09, 9.94it/s]
10%|█ | 10/100 [00:01<00:09, 9.94it/s]
11%|█ | 11/100 [00:01<00:08, 9.94it/s]
12%|█▏ | 12/100 [00:01<00:08, 9.94it/s]
13%|█▎ | 13/100 [00:01<00:08, 9.95it/s]
14%|█▍ | 14/100 [00:01<00:08, 9.95it/s]
15%|█▌ | 15/100 [00:01<00:08, 9.95it/s]
16%|█▌ | 16/100 [00:01<00:08, 9.94it/s]
17%|█▋ | 17/100 [00:01<00:08, 9.95it/s]
18%|█▊ | 18/100 [00:01<00:08, 9.95it/s]
19%|█▉ | 19/100 [00:01<00:08, 9.95it/s]
20%|██ | 20/100 [00:02<00:08, 9.95it/s]
21%|██ | 21/100 [00:02<00:07, 9.95it/s]
tqdm 使用 char \r 移动到行首并打印新文本。
我在 Linux 上的编辑器将其显示为新行,但在 Windows 上,您可能会在一行中看到所有内容,例如
0%| | 0/100 [00:00<?, ?it/s]\r 1%| | 1/100 [00:00<00:09, 9.98it/s]\r 2%|▏ | 2/100 [00:00<00:09, 9.84it/s]
如果您想获得最终值it/s,那么您宁愿使用time.time() 并手动计算。
import tqdm
import time
import sys
items = 100
start = time.time()
for i in tqdm.tqdm(range(items)):
time.sleep(0.1)
end = time.time()
diff = end-start
items_per_second = items/diff
print(f'time: {diff:.2f} s | {items_per_second:.2f} it/s')
结果:
time: 10.09 s | 9.91 it/s
当您在控制台/终端中运行代码时,您可以使用fh.write() 或print(..., file=fh) 或重定向sys.stdout 或重定向来写入文件
python script.py > output.txt