| #! /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 %s read %s" % (`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 %s read %s" % (`teststr`, `got`)) |
| got = e.read() |
| if got: |
| raise ValueError("unexected %s on stderr" % `got`) |
| for inst in popen2._active[:]: |
| inst.wait() |
| if popen2._active: |
| raise ValueError("_active not empty") |
| print "All OK" |
| |
| main() |
| _test() |