2014-04-09 7 views
3

화면을 지우지 않고 파이썬에서 Curses를 사용하고 싶습니다. 그 이유는 내 앱이 기존 화면 위에 간단한 작은 메뉴를 팝업하고 곧 종료되기를 바랍니다. 팝업 메뉴의 추악한 부분을 종료 할 때 화면에 남겨 두는 것이 바람직하지는 않지만 허용됩니다. 미학이 중요하지 않은 빠른 실용적인 sysadmin 앱 및 스크립트에 사용하는 것이 좋습니다.화면을 지우지 않고 파이썬 curses

파이썬 초기화 함수는 항상 화면을 지운 것처럼 보입니다. 몇 년 전에 내가 좋아하는 것을 하나의 비 파이썬 응용 프로그램에서 보았던 기억이 있습니다. 적어도 C Curses 프로그램에서는 가능하다는 것을 알고 있습니다.

+0

나는 같은 질문을했다. 나는 그 대답에 실망했지만 이해합니다. 미학은 나에게 중요하기 때문에 다음과 같은 해킹을 시도해 볼 것입니다. 프로그램 시작시 창의 스크린 샷 찍기, OCD를 사용하여 캐릭터를 파악한 다음 Curses를 시작하고 내가 찍은 스크린 샷을 재생 한 다음 그것 이상의 UI. 아마도 크로스 플랫폼이나 순수 파이썬 방법으로 생각하지 않기 때문에 원시 코드가 필요합니다. 만약 내가 그것을 가능하게 만들 수 있다면 여기에 대답을 공유 할 수도 있습니다. – ArtOfWarfare

답변

5

나는 "할 수 없다"라고 말하지는 않겠지 만, Curses/NCurses의 재고가있는 상태에서 "할 수 없다"라고 말할 것입니다.

근본적인 문제는 curses 라이브러리가 초기화 될 때 터미널의 현재 상태, 특히 현재 표시되는 문자와 글리프를 확인할 수 없다는 것입니다.

예전에는 PC에서 화면을 메모리 매핑 했으므로 프로그램을 실행하면 나중에 캡처하고 나중에 복원하기 위해 기존 화면 상태에 액세스 할 수있었습니다.

일반적인 스마트 단말기의 경우 반드시 그런 것은 아닙니다. Linux 나 Mac에서 터미널 유형은 일종의 "xterm"입니다. Windows 콘솔 터미널에서 ANSI 스타일 터미널입니다 (xterm은 일종의 ANSI 터미널이기도합니다). 터미널 유형은 termcap/terminfo 라이브러리에서 사용하는 코드입니다. curses는 커서 이동, 문자 및 행 삭제, 색상 또는 비디오 반전 설정 방법을 알아야합니다.

화면과 관련된 모든 상호 작용은 다음과 같습니다. 메모리 조작보다 ESCape 시퀀스의 인쇄. 프레임 버퍼에서는 작동하지 않습니다.

XTerm escape sequences의 목록을 보면 화면의 내용을 호스트 프로그램에 다시보고 할 필요가 없음을 알 수 있습니다. 그러나 대체 프레임 버퍼가 있습니다. 예를 들어 vim 일 수 있습니다. vim으로 파일을 편집하면 vim이 전체 화면을 차지합니다. 그러나 종료하면 원래 화면이 복원됩니다. vim이 대체 화면 버퍼로 전환하고 모든 작업을 수행 한 다음 종료시 기본 화면 버퍼를 복원합니다. 그러나 이것은 간단한 스위칭 연습으로 vim은 원본 화면 버퍼의 내용을 "알지 못하거나 액세스하지 못합니다."

Linux 콘솔 (FKeys를 사용하여 화면을 전환 할 수있는 곳) 또는 GNU Screen과 같은 유틸리티를 사용하는 경우에는이 기능이 다릅니다. 이것들은 다른 개념 (Linux 콘솔 용 장치 드라이버 및 GNU Screen 용 가상 터미널)에 의존하며, 전체 프로그램은 각 화면 자체의 상태를 유지합니다. 그러나이 정보는 내가 알고있는 일반 프로그램에서는 사용할 수 없습니다. 그렇다면 Curses가 아닌 독점적 인 방법을 통해 이루어집니다.

관련 문제