blob: 799df4ac4dd786bbee65d84bca0c1146938040ae [file] [log] [blame]
Guido van Rossum59e4f371999-03-11 13:26:23 +00001#! /usr/bin/env python
2"""Test script for popen2.py
3 Christian Tismer
4"""
5
Fred Drake31f182e2000-08-28 17:20:05 +00006import os
Moshe Zadkafc3fc332001-01-30 18:35:32 +00007import sys
8from test_support import TestSkipped
Fred Drake31f182e2000-08-28 17:20:05 +00009
Guido van Rossum59e4f371999-03-11 13:26:23 +000010# popen2 contains its own testing routine
11# which is especially useful to see if open files
Fredrik Lundh9407e552000-07-27 07:42:43 +000012# like stdin can be read successfully by a forked
Guido van Rossum59e4f371999-03-11 13:26:23 +000013# subprocess.
14
15def main():
Fred Drake31f182e2000-08-28 17:20:05 +000016 print "Test popen2 module:"
Moshe Zadkafc3fc332001-01-30 18:35:32 +000017 if sys.platform[:4] == 'beos' and __name__ != '__main__':
18 # Locks get messed up or something. Generally we're supposed
19 # to avoid mixing "posix" fork & exec with native threads, and
20 # they may be right about that after all.
21 raise TestSkipped, "popen2() doesn't work during import on BeOS"
Fredrik Lundh9407e552000-07-27 07:42:43 +000022 try:
23 from os import popen
24 except ImportError:
25 # if we don't have os.popen, check that
26 # we have os.fork. if not, skip the test
27 # (by raising an ImportError)
28 from os import fork
Guido van Rossum59e4f371999-03-11 13:26:23 +000029 import popen2
30 popen2._test()
31
Guido van Rossum59e4f371999-03-11 13:26:23 +000032
Fred Drake31f182e2000-08-28 17:20:05 +000033def _test():
34 # same test as popen2._test(), but using the os.popen*() API
35 print "Testing os module:"
36 import popen2
37 cmd = "cat"
Tim Peters36208572000-09-01 20:38:55 +000038 teststr = "ab cd\n"
Fred Drake31f182e2000-08-28 17:20:05 +000039 if os.name == "nt":
40 cmd = "more"
Tim Peters36208572000-09-01 20:38:55 +000041 # "more" doesn't act the same way across Windows flavors,
42 # sometimes adding an extra newline at the start or the
43 # end. So we strip whitespace off both ends for comparison.
44 expected = teststr.strip()
Fred Drake31f182e2000-08-28 17:20:05 +000045 print "testing popen2..."
46 w, r = os.popen2(cmd)
47 w.write(teststr)
48 w.close()
Tim Peters36208572000-09-01 20:38:55 +000049 got = r.read()
50 if got.strip() != expected:
51 raise ValueError("wrote %s read %s" % (`teststr`, `got`))
Fred Drake31f182e2000-08-28 17:20:05 +000052 print "testing popen3..."
53 try:
54 w, r, e = os.popen3([cmd])
55 except:
56 w, r, e = os.popen3(cmd)
57 w.write(teststr)
58 w.close()
Tim Peters36208572000-09-01 20:38:55 +000059 got = r.read()
60 if got.strip() != expected:
61 raise ValueError("wrote %s read %s" % (`teststr`, `got`))
62 got = e.read()
63 if got:
64 raise ValueError("unexected %s on stderr" % `got`)
Fred Drake31f182e2000-08-28 17:20:05 +000065 for inst in popen2._active[:]:
66 inst.wait()
Tim Peters36208572000-09-01 20:38:55 +000067 if popen2._active:
68 raise ValueError("_active not empty")
Fred Drake31f182e2000-08-28 17:20:05 +000069 print "All OK"
70
71main()
72_test()