python - code.interact() doesn't understand arrow keys when stdin is set to a socket -
i'm making lightweight manhole-like remote interactive python shell setting stdin
, stdout
, stderr
socket , calling code.interact()
.
this works beautifully except arrow keys showing ^[[c
when connect via nc localhost 1337
.
it's not issue of not having readline
installed, works fine when launch interpreter manually, if run code.interact()
. issue occurs through sockets. can import readline
inside remote shell nothing.
perhaps i'm missing related readline
in socketwrapper.read()
?
import socket import sys import readline readline.parse_and_bind('tab: complete') # doesn't work import code port = 1337 while true: sock = socket.socket() sock.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1) sock.bind(('', port)) sock.listen(1) print("~listening on port %d~" % port) connection, connection_addr = sock.accept() print("accepted connection %s." % (connection_addr,)) class socketwrapper: def __init__(self, sock): self.sock = sock def read(self, length): return self.sock.recv(length) def write(self, text): return self.sock.send(text) def readline(self): return self.sock.makefile().readline() sockfile = socketwrapper(connection) sys.stdin = sockfile sys.stdout = sockfile sys.stderr = sockfile code.interact( local=dict(globals(), **locals()) )
Comments
Post a Comment