Python 3.x 使用TQM时,cmd和idle之间有什么区别?

Python 3.x 使用TQM时,cmd和idle之间有什么区别?,python-3.x,cmd,windows-7,python-idle,tqdm,Python 3.x,Cmd,Windows 7,Python Idle,Tqdm,最近我想在我的脚本中添加一个简单的进度条,我使用了tqdm,但让我困惑的是,当我处于空闲或cmd时,输出是不同的 比如这个 from tqdm import tqdm import time def test(): for i in tqdm( range(100) ): time.sleep(0.1) 在cmd中给出预期的输出 30%|███ | 30/100 [00:03<00:07, 9.14it/s] 为什么会这样??? 有一种方法可以解

最近我想在我的脚本中添加一个简单的进度条,我使用了
tqdm
,但让我困惑的是,当我处于空闲或cmd时,输出是不同的

比如这个

from tqdm import tqdm
import time

def test():
    for i in tqdm( range(100) ):
        time.sleep(0.1)
在cmd中给出预期的输出

30%|███       | 30/100 [00:03<00:07,  9.14it/s]
为什么会这样???


有一种方法可以解决这个问题吗?

仅限于ascii字符,第二个代码的程序输出在这两种情况下都是相同的——一个代表ascii字符的ascii字节流。语言定义没有也不能指定输出设备或显示程序将如何处理字节,尤其是控制字符,如“\r”

Windows命令提示符控制台有时至少会将“\r”解释为“将光标返回到当前行的开头而不删除任何内容”。 在Win10控制台中:

>>> import sys; out=sys.stdout
>>> out.write('abc\rdef')
def7
但是,当我运行您的第二个代码时,添加了missing time import,我没有看到覆盖行为,但看到了与IDLE相同的连续行输出

C:\Users\Terry>python f:/python/mypy/tem.py
[------------------------------------------------------------] 0.0% ...range 100[#-----------------------------------------------------------] ...
第三方面,如果缩短写入
file.write([%s]\r”%bar)
,那么我确实看到一个输出被一次又一次地覆盖


IDLE使用的tk文本小部件仅解释\t和\n,而不解释其他控制字符。对于我们中的一些人来说,这似乎适用于开发环境,在开发环境中,删除字符不如在生产环境中合适。

那么,在resumen中,为了获得想要的结果,我必须使用cmd?或者有一种方法告诉空闲者处理其他控制字符?您必须使用命令窗口。我可能会在将来添加另一个选项,使测试更容易。但这并不是我的首要任务。几个月前,我在空闲帮助中添加了“空闲-控制台差异”一节(在空闲的帮助菜单上,作为的一部分。我计划进一步修改它。嗯,我想tkinter有一个小部件,我很久以前就尝试过它,但我已经忘记了。我的脚本一点也不奇怪,只是下载一些带有
urllib.request.urlretrieve
的img,所以它实际上不需要gui,但也许以后我会尝试使用它来制作dou。)ble进度条,看看是否比
tqdm_gui
中的进度条更好。除此之外,
tqdm
中的进度条非常完美,我只需要记住在cmdtkinter.ttk.Progressbar中执行脚本。我前面的评论的要点是,tk小部件中显示的文本的内容可以更改与小部件调用关联,但与\r.无关:
>>> import sys; out=sys.stdout
>>> out.write('abc\rdef')
def7
C:\Users\Terry>python f:/python/mypy/tem.py
[------------------------------------------------------------] 0.0% ...range 100[#-----------------------------------------------------------] ...