Bir NCURSES programıyla etkileşime geçmeye çalışıyorum. Örneğin, GNU Ekranını kullanıyorum ve içinde koşulu çalıştırıyorum. (bunun yerine mc ile deneyebilirsiniz.)Terminal gibi davranan bir alt işlemle nasıl etkileşime girerim?
Aşağıdaki program, oturumuma bağlanmak için -x ile bir ekran oturumu başlatır.
Ok aşağı ve Yukarı ok tuşlarına basarak gitmek istiyorum.
Çıkmak için 'q' gönderirsem, diğer ekran oturumumda bir kutu görüyorum.
Ok tuşları gibi özel anahtarlar almak için ne yapmam gerekir?
Şu anda gönderdiğim VT102 dizisini görmezden geliyor gibi görünüyor.
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()
GÜNCELLEME:
Ted ESC [A (yukarı) ve ESC [B (aşağı) bash ile çalışır ile komut geçmişi yürüyüş söyledi.
Neden yetenekte olduğumu merak etme TERM = xterm değerini TERM = ansi olarak değiştirdim. Neden xterm çalışmıyor?
Bu biraz kafa karıştırıcı bir sorudur - Twisted üzerinden ağ üzerinden Ok aşağı gibi kontrol tuşlarının nasıl gönderileceğini mi soruyorsunuz? – Michael
Ağ genelinde değil. spawnProcess bir süreci yerel olarak başlatır ve dosya tanımlayıcılarını bağlar, böylece onunla konuşabilirsiniz. –
"foo" daki ESC B aşağı ok muydu? Aşağı ok ESC üretir [B, sadece ESC B değil. – torek