Python을 사용하여 Windows 가상 터미널에서 ANSI 이스케이프 시퀀스를 활성화하는 방법

현재 작업하고 있는 프로젝트 중 하나는 Python을 사용하여 만든 콘솔에서 재생되는 the classic Spider Solitaire game의 구현입니다.

출력물을 보기 쉽게 하기 위해 이전에 사용했던 것처럼 이스케이프 시퀀스를 사용하여 몇 가지 세부 사항의 색상을 변경하려고 했습니다. 출력 형식을 올바르게 지정했는지 확인하기 위한 첫 번째 테스트에서 문자열 형식의 시퀀스를 보고 놀랐습니다.

←[90mXX←[97m ←[90mXX←[97m ←[90mXX←[97m ←[90mXX←[97m ←[90mXX←[97m


콘솔에서 이미 2048 in a similar way 을 구현했고 제대로 작동했기 때문에 이것은 더욱 놀라운 일이었습니다.

몇 가지 파헤친 후에 Windows 터미널이 ANSI 이스케이프 시퀀스를 지원하지만 이 기능은 기본적으로 활성화되어 있지 않다는 것을 알게 되었습니다. enable it from within the application 해야 합니다. 꽤 쉽게 할 수 있는 작업입니다in Python as well.

2048 구현에서는 작동하지만 이 프로젝트에서는 작동하지 않는 이유가 여전히 궁금했고 몇 가지 검사 후에 알아낼 수 있었습니다. 아직 os 모듈로 수행한 Spider Solitaire의 화면 청소를 구현하지 않았습니다.

os.system("cls")


또는 어쨌든 그것을 Linux로 포팅할 계획이었기 때문에 Python에서 필요할 수 있는 최소한의 노력:

os.system("cls" if os.name == "nt" else "clear")


갑자기 출력이 채색되었습니다.



어쨌든 화면 지우기를 구현해야 했지만, 이 작은 코드가 그렇게 중요한 영향을 미칠 것이라고는 전혀 예상하지 못했습니다.

Microsoft의 페이지clearing the console screen에도 이스케이프 시퀀스 활성화가 포함되어 있으므로 Microsoft가 이를 알고 있는지 확실하지 않습니다. 하지만 그것은 단지 청소년의 말에 대한 과신일 수도 있습니다.

배경 Python 마법이 아닌지 확인하기 위해 작은 C++ 프로그램을 작성하여 확인했습니다.

#include <iostream>
#include <windows.h>

int main() {
    system("cls");
    std::cout << "\033[31mHello, red\033[97m" << std::endl;
    return 0;
}

system("cls") 없이 모든 문자를 출력하지만 원하는 빨간색의 짧은 텍스트만 출력합니다.





의심스럽기는 하지만 여전히 Windows 10을 사용하고 있다는 사실과 관련이 있을 수 있지만 그럼에도 불구하고 흥미롭고 이상한 관찰입니다.

읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기