Frage

Ich erstelle eine Anwendung, die verwendet curses So erstellen Sie eine einfache Benutzeroberfläche. Es verwendet auch die subprocess Modul zum Ausführen eines externen Texteditors, damit ein Benutzer einen Text eingeben, dann den Editor schließen und zum Hauptprogramm zurückkehren kann.

Das Problem ist, dass Flüche, wenn der Editor auf Konsolenbasis wie VIM oder Nano ist, nicht ordnungsgemäß entzieht. Das heißt, wenn der Farbmodus verwendet wird (curses.start_color()), Terminal bleibt nach Abschluss des Programms gefärbt.

Hier ist ein Testskript mit diesem Problem (zumindest für mich verwende ich Ubuntu und Gnome-terminal):

import curses
import subprocess

screen = curses.initscr()
curses.noecho()
curses.cbreak()
screen.keypad(1)
try:
    curses.curs_set(0)
except curses.error:
    pass
curses.start_color()

screen.addstr(0, 0, 'hello, world!')
screen.refresh()

while 1:
    c = screen.getch()
    if c == ord('q'):
        break
    if c == ord('r'):
        subprocess.call('vim', shell=False)
        screen.clear()
        screen.addstr(0, 0, 'hello, world!')
        screen.refresh()

curses.nocbreak()
screen.keypad(0)
curses.echo()
curses.curs_set(1)
curses.endwin()

(Drücken Sie r dann betreten, dann q beenden.)

Gibt es eine Möglichkeit, dies zu beheben?

War es hilfreich?

Lösung

Würde Ihren Code ändern, um:

if c == ord('q'):
    subprocess.call('reset', shell=False)
    break

genug für dich sein? Oder gibt es ein zusätzliches Verhalten in Ihrem realen Skript, das nicht in dem hier eingefügten Code ist, der diese Problemumgehung für Ihr Ziel ungeeignet macht?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top