home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / test_popen2.py < prev    next >
Text File  |  2003-12-30  |  2KB  |  74 lines

  1. #! /usr/bin/env python
  2. """Test script for popen2.py
  3.    Christian Tismer
  4. """
  5.  
  6. import os
  7. import sys
  8. from test.test_support import TestSkipped
  9.  
  10. # popen2 contains its own testing routine
  11. # which is especially useful to see if open files
  12. # like stdin can be read successfully by a forked
  13. # subprocess.
  14.  
  15. def main():
  16.     print "Test popen2 module:"
  17.     if (sys.platform[:4] == 'beos' or sys.platform[:6] == 'atheos') \
  18.            and __name__ != '__main__':
  19.         #  Locks get messed up or something.  Generally we're supposed
  20.         #  to avoid mixing "posix" fork & exec with native threads, and
  21.         #  they may be right about that after all.
  22.         raise TestSkipped, "popen2() doesn't work during import on " + sys.platform
  23.     try:
  24.         from os import popen
  25.     except ImportError:
  26.         # if we don't have os.popen, check that
  27.         # we have os.fork.  if not, skip the test
  28.         # (by raising an ImportError)
  29.         from os import fork
  30.     import popen2
  31.     popen2._test()
  32.  
  33.  
  34. def _test():
  35.     # same test as popen2._test(), but using the os.popen*() API
  36.     print "Testing os module:"
  37.     import popen2
  38.     cmd  = "cat"
  39.     teststr = "ab cd\n"
  40.     if os.name == "nt":
  41.         cmd = "more"
  42.     # "more" doesn't act the same way across Windows flavors,
  43.     # sometimes adding an extra newline at the start or the
  44.     # end.  So we strip whitespace off both ends for comparison.
  45.     expected = teststr.strip()
  46.     print "testing popen2..."
  47.     w, r = os.popen2(cmd)
  48.     w.write(teststr)
  49.     w.close()
  50.     got = r.read()
  51.     if got.strip() != expected:
  52.         raise ValueError("wrote %s read %s" % (`teststr`, `got`))
  53.     print "testing popen3..."
  54.     try:
  55.         w, r, e = os.popen3([cmd])
  56.     except:
  57.         w, r, e = os.popen3(cmd)
  58.     w.write(teststr)
  59.     w.close()
  60.     got = r.read()
  61.     if got.strip() != expected:
  62.         raise ValueError("wrote %s read %s" % (`teststr`, `got`))
  63.     got = e.read()
  64.     if got:
  65.         raise ValueError("unexected %s on stderr" % `got`)
  66.     for inst in popen2._active[:]:
  67.         inst.wait()
  68.     if popen2._active:
  69.         raise ValueError("_active not empty")
  70.     print "All OK"
  71.  
  72. main()
  73. _test()
  74.