On Sat, 20 Sep 2008 23:14:26 +0200, Hendrik van Rooyen wrote:
class console(object):
"""
This spoofs a single file like object, using stdout & - in
(Minimalistic proof of concept implementation) """
def __init__(self):
self.read = sys.stdin.read
self.readline = sys.stdin.readline
self.write = sys.stdout.write
self.flush = sys.stdout.flush
self.closeout = sys.stdout.close # keep references to close
self.closein = sys.stdin.close
def close(self):
self.closein()
self.closeout()
I'm not sure that closing stdin and stout are a good idea. This could
have side-effects for other parts of your program, and will almost
certainly end badly if you're running in the interactive interpreter.
Other than that, what you've done seems reasonable, although since every
instance of console() has the same state, I'd write it slightly
differently:
class console(object):
"""
This spoofs a single file like object, using stdout & - in
(Minimalistic proof of concept implementation)
"""
read = sys.stdin.read
readline = sys.stdin.readline
write = sys.stdout.write
flush = sys.stdout.flush
closeout = sys.stdout.close
closein = sys.stdin.close
@classmethod
def close(cls):
cls.closein()
cls.closeout()
[...]
Questions are:
Is this a reasonable way of doing this kind of thing? Is there a
canonical or better way of doing it? Am I missing something?
It seems to me that you might have been better off to write your program
to take two files, an input and an output, instead of forcing both to go
to the same file.
if 'serial' in sys.argv: # for RS-232 i/o to terminal
infile = open('/dev/ttyS0','r+b')
outfile = infile
else: # console i/o
infile = sys.stdin
outfile = sys.stdout
Hope this helps.
--
Steven