我想和一个NCURSES项目互动。在
作为一个例子,我使用GNU屏幕并在里面运行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()
更新:
泰德告诉我在命令历史中使用ESC[A(向上)和ESC[B(向下)与bash一起工作。
想知道为什么在aptitude中,我没有把TERM=xterm改成TERM=ansi,这样就可以修复它了。为什么xterm不起作用我还是很困惑。
也许像Pexpect这样的东西在这里可能有用:
https://pypi.python.org/pypi/pexpect
它是Expect的一个python实现,它基本上监视输入并基于模式执行操作,就像一个人坐在那里与应用程序交互一样。在
使用Ubuntu13.04,看起来}的控制代码并不完全相同。在
ansi
和{…所以看起来您需要发送字符串
'\033OB'
来模拟带有xterm
的下箭头。在下面的代码对我有用。。。在
^{pr2}$……虽然完工后把我的终端搞砸了,所以我不得不。。。在
…让它重新工作。在
更新
刚刚找到了一种更容易确定正确控制代码的方法。如果加载
vi
,进入插入模式,然后按CTRL-V
,然后按要模拟的键,它将显示从终端发送的文本字符串。在例如。。。在
…其中
^[
是CTRL-[
,即'\033'
。在获得特定终端函数代码的一个好方法是使用
tput
命令,对于某些带有-T
选项的特定终端类型。在在Python中,使用
curses
模块获得正确的代码:您可以通过启动}之后。否则,您的终端可能会处于一个坏状态。在C语言中,在某些退出处理程序中也有这样的功能,以便在出错时重置终端,但Python模块可以自己处理。在
man terminfo
来了解可用功能。上面的例子可能需要savetty()
在setupterm
之前,和{与硬编码终端代码相比,这种方法具有在系统之间可移植的优点,其中exterm的terminfo可能不同于当前Linux发行版。在
相关问题 更多 >
编程相关推荐