Verwendung von Subprozess in einer Flutanwendung
-
26-10-2019 - |
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?
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?