python-3.x - instalar - idle python
¿Cuál es la diferencia entre cmd y inactivo cuando se usa tqdm? (1)
Limitándonos a los caracteres ascii, el resultado del segundo código del programa es el mismo en ambos casos: una secuencia de bytes ascii que representan ascii chars. La definición de idioma no especifica ni puede especificar qué hará un dispositivo de salida o un programa de visualización con los bytes, en particular con los caracteres de control como ''/ r''.
La consola de Windows Command Prompt al menos a veces interpreta ''/ r'' como ''devolver el cursor al comienzo de la línea actual sin borrar nada''. En una consola Win10:
>>> import sys; out=sys.stdout
>>> out.write(''abc/rdef'')
def7
Sin embargo, cuando ejecuto su segundo código, con la importación de tiempo faltante, no veo el comportamiento de sobrescritura, pero veo el mismo resultado de línea continua que con IDLE.
C:/Users/Terry>python f:/python/mypy/tem.py
[------------------------------------------------------------] 0.0% ...range 100[#-----------------------------------------------------------] ...
Por otro lado, si file.write("[%s]/r"% bar)
la escritura a file.write("[%s]/r"% bar)
, entonces veo una salida sobreescrita una y otra vez.
El widget de texto tk utilizado por IDLE solo interpreta / t y / n, pero no otros caracteres de control. Para algunos de nosotros, esto parece apropiado para un entorno de desarrollo, donde borrar caracteres es menos apropiado que en un entorno de producción.
Recientemente quiero agregar una barra de progreso simple a mi script, uso tqdm
para eso, pero lo que me tqdm
es que la salida es diferente cuando estoy en el IDLE o en el cmd
por ejemplo esto
from tqdm import tqdm
import time
def test():
for i in tqdm( range(100) ):
time.sleep(0.1)
dar el resultado esperado en el cmd
30%|███ | 30/100 [00:03<00:07, 9.14it/s]
pero en el IDLE el resultado es así
0%| | 0/100 [00:00<?, ?it/s]
1%|1 | 1/100 [00:00<00:10, 9.14it/s]
2%|2 | 2/100 [00:00<00:11, 8.77it/s]
3%|3 | 3/100 [00:00<00:11, 8.52it/s]
4%|4 | 4/100 [00:00<00:11, 8.36it/s]
5%|5 | 5/100 [00:00<00:11, 8.25it/s]
6%|6 | 6/100 [00:00<00:11, 8.17it/s]
7%|7 | 7/100 [00:00<00:11, 8.12it/s]
8%|8 | 8/100 [00:00<00:11, 8.08it/s]
9%|9 | 9/100 [00:01<00:11, 8.06it/s]
10%|# | 10/100 [00:01<00:11, 8.04it/s]
11%|#1 | 11/100 [00:01<00:11, 8.03it/s]
12%|#2 | 12/100 [00:01<00:10, 8.02it/s]
13%|#3 | 13/100 [00:01<00:10, 8.01it/s]
14%|#4 | 14/100 [00:01<00:10, 8.01it/s]
15%|#5 | 15/100 [00:01<00:10, 8.01it/s]
16%|#6 | 16/100 [00:01<00:10, 8.00it/s]
17%|#7 | 17/100 [00:02<00:10, 8.00it/s]
18%|#8 | 18/100 [00:02<00:10, 8.00it/s]
19%|#9 | 19/100 [00:02<00:10, 8.00it/s]
20%|## | 20/100 [00:02<00:09, 8.00it/s]
21%|##1 | 21/100 [00:02<00:09, 8.00it/s]
22%|##2 | 22/100 [00:02<00:09, 8.00it/s]
23%|##3 | 23/100 [00:02<00:09, 8.00it/s]
24%|##4 | 24/100 [00:02<00:09, 8.00it/s]
25%|##5 | 25/100 [00:03<00:09, 8.00it/s]
26%|##6 | 26/100 [00:03<00:09, 8.00it/s]
27%|##7 | 27/100 [00:03<00:09, 8.09it/s]
28%|##8 | 28/100 [00:03<00:09, 7.77it/s]
29%|##9 | 29/100 [00:03<00:09, 7.84it/s]
30%|### | 30/100 [00:03<00:08, 7.89it/s]
31%|###1 | 31/100 [00:03<00:08, 7.92it/s]
32%|###2 | 32/100 [00:03<00:08, 7.94it/s]
33%|###3 | 33/100 [00:04<00:08, 7.96it/s]
34%|###4 | 34/100 [00:04<00:08, 7.97it/s]
35%|###5 | 35/100 [00:04<00:08, 7.98it/s]
36%|###6 | 36/100 [00:04<00:08, 7.99it/s]
37%|###7 | 37/100 [00:04<00:07, 7.99it/s]
38%|###8 | 38/100 [00:04<00:07, 7.99it/s]
39%|###9 | 39/100 [00:04<00:07, 8.00it/s]
40%|#### | 40/100 [00:04<00:07, 8.00it/s]
41%|####1 | 41/100 [00:05<00:07, 8.00it/s]
También obtengo el mismo resultado si hago mi propia barra de progreso como
import sys
def progress_bar_cmd(count,total,suffix="",*,bar_len=60,file=sys.stdout):
filled_len = round(bar_len*count/total)
percents = round(100*count/total,2)
bar = "#"*filled_len + "-"*(bar_len - filled_len)
file.write( "[%s] %s%s ...%s/r"%(bar,percents,"%",suffix))
file.flush()
for i in range(101):
time.sleep(1)
progress_bar_cmd(i,100,"range 100")
¿¿¿¿porqué es eso????
y hay una manera de arreglarlo ???