On 2015-05-23 01:27, Benjamin Risher wrote:
First, the snippet provided is a contrived example of a much larger program.

http://pastebin.com/xRqBE5BY

(written in python3 with access to 3.4 if necessary)

The goal:  To connect to a listening socket and send commands to the cmd.Cmd() 
loop running, then show the output to both stdout and the remote connection.

Right now, I have a solution that will work as long as everything that needs to 
get sent to stdout and the socket is return'd from each function instead of 
printed.

Because this is already a larger project, I would prefer not to have to go back 
through and refactor everything to facilitate the remote control (the actual 
program involves threading and locks etc etc).

I feel like there should be a fairly simple solution dealing with duplicating 
the file descriptor or something similar.  I've messed around trying to find 
something like that, but without success.

I've also looked into the contextlib.redirect_stdout, but it expects a file 
type object.  Also, using socket.makefile() results in the returned object not 
having a fileno() method, so I can't use select on it.

Basically, I'm hoping someone here knows some file descriptor-fu or some other 
cleaner solution.

Any help would be appreciated!


remote display ------------- | ------------ menu display

$>nc localhost 12345         | s function called.
s                            | h function called.
s function called.           | Traceback ...
h                            | 44: 'NoneType' object has no attribute 'strip'

$>

You could replace the current sys.stdout object with your own object that copies to the original sys.stdout object and the socket.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to