google / google/python-fire

formatting_windows.initialize_or_disable breaks ansi escape codes

未關閉
#339 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
Python
星號
28.2k
分支
1.5k
PR 合併指標
30 天內沒有已合併 PR

描述

A recent modification added a call to `SetConsoleMode` that enables virtual terminal processing on Windows. This change prevents parent processes from receiving ANSI escape codes in the stdout of child processes. The only means to work around this, at the moment, is to comment out the call `initialize_or_disable`. In my opinion, modifying the console mode is outside of the scope and Fire and should not be happening

Below is a script that demonstrates the issue.
```
import fire, subprocess, sys

__color_names__ = ('red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white')

def print_with_colors():
parts = []
color_off = '\x1b[0m'
for index, color_name in enumerate(__color_names__):
color_on = '\x1b[{}m'.format(31+index)
parts.append(f'{color_on}{color_name}{color_off}')
print(' '.join(parts))

def test_case_1():
"""print with ansi colors in the current process"""
print_with_colors()

def test_case_2():
"""print with ansi colors from sub process"""
cmd = [sys.executable, sys.argv[0], 'print_with_colors']
completed = subprocess.run(cmd, check=True, capture_output=True, text=True)
print(completed.stdout)

if __name__ == '__main__':
if len(sys.argv) == 1:
test_case_1()
test_case_2()
else:
fire.Fire()
```

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。