使用python2.7.x汉化opentoonz用户手册的报错问题

λ python -m sphinx_intl update -p build/gettext -l zh_CN
Traceback (most recent call last):
File "F:\python2.7.10\lib\runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "F:\python2.7.10\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "F:\python2.7.10\lib\site-packages\sphinx_intl\__main__.py", line 5, in <module>
main()
File "F:\python2.7.10\lib\site-packages\click\core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "F:\python2.7.10\lib\site-packages\click\core.py", line 782, in main
rv = self.invoke(ctx)
File "F:\python2.7.10\lib\site-packages\click\core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "F:\python2.7.10\lib\site-packages\click\core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "F:\python2.7.10\lib\site-packages\click\core.py", line 610, in invoke
return callback(*args, **kwargs)
File "F:\python2.7.10\lib\site-packages\sphinx_intl\commands.py", line 263, in update
basic.update(locale_dir, pot_dir, languages, line_width)
File "F:\python2.7.10\lib\site-packages\sphinx_intl\basic.py", line 70, in update
click.echo('Create: {0}'.format(po_file))
File "F:\python2.7.10\lib\site-packages\click\utils.py", line 267, in echo
file = auto_wrap_for_ansi(file)
File "F:\python2.7.10\lib\site-packages\click\_compat.py", line 704, in auto_wrap_for_ansi
ansi_wrapper = colorama.AnsiToWin32(stream, strip=strip)
File "F:\python2.7.10\lib\site-packages\colorama\ansitowin32.py", line 101, in __init__
system_has_native_ansi = not on_windows or enable_vt_processing(fd)
File "F:\python2.7.10\lib\site-packages\colorama\winterm.py", line 183, in enable_vt_processing
handle = get_osfhandle(fd)
IOError: [Errno 9] Bad file descriptor

直接修改 colorama 的源代码(最有效)

找到这个文件:
F:\python2.7.10\lib\site-packages\colorama\winterm.py

打开后找到第183行附近(包含 enable_vt_processing 函数的地方),将这个函数修改为:

def enable_vt_processing(fd):
    return False
"""
    if win32.windll is None or not win32.winapi_test():
        return False

    try:
        handle = get_osfhandle(fd)
        mode = win32.GetConsoleMode(handle)
        win32.SetConsoleMode(
            handle,
            mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING,
        )

        mode = win32.GetConsoleMode(handle)
        if mode & win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING:
            return True
    # Can get TypeError in testsuite where 'fd' is a Mock()
    except (OSError, TypeError):
        return False
"""

 

posted on 2026-01-24 09:59  小沙盒工作室  阅读(0)  评论(0)    收藏  举报