NCURSESプログラムと対話しようとしています。端末になりすます子プロセスと対話するにはどうすればよいですか?
例として、私はGNU Screenを使用していて、内部でaptitudeを実行しています。 (代わりにmcで試すことができます)
以下のプログラムは、セッションに接続するために-xで画面セッションを開始します。
矢印ダウンとアローアップを押してナビゲートしたいと考えています。
終了するために「q」を送信すると、他の画面セッションでボックスのポップアップが表示されます。
矢印キーのような特殊キーを使用するには、どうすればよいですか?
現在、私は送信しているVT102シーケンスを無視しているようです。
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は:
テッドはESC [A(アップ)とESC [B(下)はbashで動作して、コマンド履歴に歩いて私に言いました。
なぜaptitudeではTERM = xtermをTERM = ansiに変更したのでしょうか?なぜxtermがまだ動かないのか、私は困惑しています。
これは幾分混乱する質問です - あなたは、Twistedを介してネットワーク上で矢印ダウンなどのコントロールキーを送信する方法を尋ねていますか? – Michael
ネットワーク経由ではありません。 spawnProcessはプロセスをローカルで開始し、ファイルディスクリプタを接続して話をすることができます。 –
'foo'のESC Bは下向き矢印ですか?下矢印はESC [B、ESC Bだけでなく、それを生成します。 – torek