刷新控制台屏幕与特殊的unicode类解决办法,为windows cons

2024-06-28 20:28:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在windows控制台中创建一个简单的文本进度条,并显示utf8字符。在

问题不是unicode字符不会显示,而是会显示。 为了显示unicode字符,我使用了一个类系统标准输出怎么办。这干扰了正常的flush()函数。在

如何在控制台中恢复flush()函数并仍然使用这个unicode类?在

#coding=<utf8>
import sys, os

#make windows console unicode friendly
if sys.platform == "win32":
    os.popen('chcp 65001')
    class UniStream(object):
        __slots__= "fileno", "softspace",
        def __init__(self, fileobject):
            self.fileno= fileobject.fileno()
            self.softspace= False

        def write(self, text):
            if isinstance(text, unicode):
                os.write(self.fileno, text.encode("utf_8"))
            else:
                os.write(self.fileno, text)
        def flush(self):
            self.flush()

    sys.stdout = UniStream(sys.stdout)
    sys.stderr = UniStream(sys.stderr)

def progress(num):
    sys.stdout.write("\r"+str(num)+"%    τοις εκατό...")
    sys.stdout.flush()


for i in xrange(2000):
    progress(i)


x = raw_input('done')

Tags: 函数textselfoswindowsdefstdoutsys
1条回答
网友
1楼 · 发布于 2024-06-28 20:28:33

也许你应该用更原始的方法用退格来删除之前的数字? 或者做一些类似的事情:

def progress(num): 
    sys.stdout.write("\r"+20*" "+"\r"+str(num)+"%    τοις εκατό...") 

在返回后用空格覆盖并进行第二次返回。在

我没有看到任何闪烁时,我这样做,它只对我运行代码从命令窗口,而不是双击。在

^{pr2}$

相关问题 更多 >