Ich versuche, mit einem NCURSES-Programm zu interagieren.Wie interagiere ich mit einem Kindprozess, der vorgibt, ein Terminal zu sein?
Als Beispiel verwende ich GNU-Bildschirm und führen aptitude innerhalb. (Sie könnten es stattdessen mit mc versuchen.)
Das folgende Programm startet eine Bildschirmsitzung mit -x, um eine Verbindung zu meiner Sitzung herzustellen.
Ich möchte navigieren, indem Sie Pfeil nach unten und Pfeil nach oben drücken.
Wenn ich 'q' zum Beenden sende, sehe ich eine Box in meiner anderen Bildschirmsitzung.
Was muss ich tun, damit spezielle Tasten wie Pfeiltasten funktionieren?
Es scheint derzeit die VT102-Sequenz zu ignorieren, die ich sende.
from twisted.internet import protocol, reactor
class MyPP(protocol.ProcessProtocol):
def connectionMade(self):
reactor.callLater(1.0, self.foo)
def foo(self):
self.transport.write('\033[B')
def processExited(self, reason):
print "processExited, status %s" % (reason.value.exitCode,)
def outReceived(self, data):
print data
def errReceived(self, data):
print "errReceived!", data
pp = MyPP()
command = ['screen', '-x']
reactor.spawnProcess(pp, command[0], command, {'TERM':'xterm'}, usePTY=True)
reactor.run()
UPDATE:
Ted sagte mir, mit ESC in der Kommando Geschichte zu Fuß [A (oben) und ESC [B (unten) arbeitet mit bash.
Ich frage mich, warum in Aptitude habe ich nicht geändert TERM = Xterm zu TERM = ansi, die es behebt. Warum xterm nicht funktioniert, verwirrt mich immer noch.
Das ist eine etwas verwirrende Frage - fragen Sie, wie Sie Kontrollschlüssel wie Pfeil nach unten über das Netzwerk über Twisted senden? – Michael
Nicht im Netzwerk. spawnProcess startet einen Prozess lokal und verknüpft Dateideskriptoren, damit Sie mit ihm sprechen können. –
Ist der ESC B in 'foo' der Abwärtspfeil? Pfeil nach unten erzeugt ESC [B, nicht nur ESC B. – torek