summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_popen2.py
blob: 26ef9d933ede0bac8261cd0286bc83d956822b62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#! /usr/bin/env python
"""Test script for popen2.py
   Christian Tismer
"""

import os

# 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:"
    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 = "abc\n"
    resultstr = teststr
    if os.name == "nt":
        cmd = "more"
        resultstr = "\n" + resultstr
    print "testing popen2..."
    w, r = os.popen2(cmd)
    w.write(teststr)
    w.close()
    assert r.read() == resultstr
    print "testing popen3..."
    try:
        w, r, e = os.popen3([cmd])
    except:
        w, r, e = os.popen3(cmd)
    w.write(teststr)
    w.close()
    assert r.read() == resultstr
    assert e.read() == ""
    for inst in popen2._active[:]:
        inst.wait()
    assert not popen2._active
    print "All OK"

main()
_test()