這裏是我想出了後人的代碼(從code of Jp Calderone爲主)。
批評是值得歡迎的
import os
import tty
import sys
import termios
from pprint import pprint, pformat
from twisted.internet import reactor, stdio
from twisted.python import log
from twisted.conch.insults.insults import ServerProtocol
from twisted.conch.recvline import HistoricRecvLine
from twisted.conch.recvline import RecvLine
try:
from fabulous.color import fg256
_format_prompt = lambda x: fg256(63, x).as_utf8
except ImportError:
_format_prompt = lambda x: x
class Fubar(HistoricRecvLine):
def connectionLost(self, reason):
print 'Connection lost because', pformat(reason)
reactor.stop()
def lineReceived(self, line):
if line == "quit" or line == "exit" or line == "q":
self.terminal.loseConnection()
self.terminal.write('echo: %s' % (pformat(line)))
self.terminal.nextLine()
self.terminal.write(self.ps[self.pn])
def connectionMade(self):
"""Called after a connection has been established."""
pprint(self.ps)
self.ps = (_format_prompt('echo> '), '...')
RecvLine.connectionMade(self)
self.historyLines = []
self.historyPosition = 0
t = self.terminal
self.keyHandlers.update({t.UP_ARROW: self.handle_UP,
t.DOWN_ARROW: self.handle_DOWN})
def runWithProtocol(klass):
fd = sys.__stdin__.fileno()
oldSettings = termios.tcgetattr(fd)
tty.setraw(fd)
try:
p = ServerProtocol(klass)
stdio.StandardIO(p)
reactor.run()
finally:
termios.tcsetattr(fd, termios.TCSANOW, oldSettings)
os.write(fd, "\r\x1bc\r")
def main(argv=None):
log.startLogging(file('child.log', 'w'))
runWithProtocol(Fubar)
if __name__ == '__main__':
main()
簡潔,信息豐富,給點意見。 +1 – Sardathrion 2013-04-11 07:22:42