#! /usr/bin/env python """Test script for popen2.py Christian Tismer """ import os import sys from test.test_support import TestSkipped # popen2 contains its own testing routine # which is especially useful to see if open files # like stdin can be read successfully by a forked # subprocess. def main(): print "Test popen2 module:" if (sys.platform[:4] == 'beos' or sys.platform[:6] == 'atheos') \ and __name__ != '__main__': # Locks get messed up or something. Generally we're supposed # to avoid mixing "posix" fork & exec with native threads, and # they may be right about that after all. raise TestSkipped, "popen2() doesn't work during import on " + sys.platform try: from os import popen except ImportError: # if we don't have os.popen, check that # we have os.fork. if not, skip the test # (by raising an ImportError) from os import fork import popen2 popen2._test() def _test(): # same test as popen2._test(), but using the os.popen*() API print "Testing os module:" import popen2 cmd = "cat" teststr = "ab cd\n" if os.name == "nt": cmd = "more" # "more" doesn't act the same way across Windows flavors, # sometimes adding an extra newline at the start or the # end. So we strip whitespace off both ends for comparison. expected = teststr.strip() print "testing popen2..." w, r = os.popen2(cmd) w.write(teststr) w.close() got = r.read() if got.strip() != expected: raise ValueError("wrote %r read %r" % (teststr, got)) print "testing popen3..." try: w, r, e = os.popen3([cmd]) except: w, r, e = os.popen3(cmd) w.write(teststr) w.close() got = r.read() if got.strip() != expected: raise ValueError("wrote %r read %r" % (teststr, got)) got = e.read() if got: raise ValueError("unexected %r on stderr" % (got,)) for inst in popen2._active[:]: inst.wait() if popen2._active: raise ValueError("_active not empty") print "All OK" main() _test()