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 -- http://mail.python.org/mailman/listinfo/python-list