This example shows a nifty use of a Pyro proxy object. We use it to replace sys.stdin and sys.stdout, so that all input and output is handled by a remote program instead. inputoutput.py is the i/o 'server' that provides the remote input/output program.py is a simple program that asks a few lines of input from the user and prints a few lines of resulting text. If you feed it the URI of the inputoutput server, it will replace the local stdin/stdout with the appropriate Pyro proxies, so that it now does its i/o remotely. There's one special thing going on in the inputoutput server: it needs to wrap the stdin/stdout file objects with a simple proxy object because otherwise Pyro can't inject its custom attributes that it needs to be able to treat the object (file stream) as a Pyro object. The proxy 'knows' that all special Pyro attributes start with _pyro. Also, it needs to intercept the fileno attribute and pretend it doesn't exist, otherwise the thing doesn't seem to work on Python 3.x.