당신은 정말로 두 가지 선택이 있습니다. 하나는 Curses 모드를 남기고 프로그램을 실행 한 다음 Curses를 재개 할 수 있습니다. 둘째, 프로그램을 비동기로 실행하고 출력을 구문 분석하고 화면에 쓸 수 있습니다.
첫 번째 옵션에 대한 좋은 소식은 실제로 UI에 대한 멋진 save_state / load_state 메소드를 작성할 필요가 없다는 것입니다. 저주는 당신을 위해 이것을합니다. 다음은 내 요점을 보여주는 간단한 예입니다
import curses, time, subprocess
class suspend_curses():
"""Context Manager to temporarily leave curses mode"""
def __enter__(self):
curses.endwin()
def __exit__(self, exc_type, exc_val, tb):
newscr = curses.initscr()
newscr.addstr('Newscreen is %s\n' % newscr)
newscr.refresh()
curses.doupdate()
def main(stdscr):
stdscr.addstr('Stdscreen is %s\n' % stdscr)
stdscr.refresh()
time.sleep(1)
with suspend_curses():
subprocess.call(['ls'])
time.sleep(1)
stdscr.refresh()
time.sleep(5)
curses.wrapper(main)
예제를 실행하면 curses.wrapper
그리고 창조 된 것 curses.initscr
재개시 같은 객체입니다. 즉, 창문이 반환되었습니다 curses.initscr
싱글 톤입니다. 이를 통해 각 위젯의 업데이트없이 저주를 종료하고 위의 이력서를 이용할 수 있습니다. self.screen
매번 참조.
두 번째 옵션은 훨씬 더 관여하지만 훨씬 유연합니다. 다음은 단지 기본 아이디어를 나타내는 것입니다.
class procWidget():
def __init__(self, stdscr):
# make subwindow / panel
self.proc = subprocess.Popen(my_args, stdout=subprocess.PIPE)
def update(self):
data = self.proc.stdout.readline()
# parse data as necessary
# call addstr() and refresh()
그런 다음 프로그램 어딘가에 전화하고 싶을 것입니다. update
타이머의 모든 procwidget에. 이렇게하면 하위 바람이 모든 크기/장소를 만들 수 있도록 옵션을 제공하므로 적합한 많은 ProcWidget을 가질 수 있습니다. 프로세스가 종료 될 때 및 기타 유사한 이벤트에 대한 처리를 추가해야합니다.