mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#! /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("unexpected %r on stderr" % (got,))
 | 
						|
    for inst in popen2._active[:]:
 | 
						|
        inst.wait()
 | 
						|
    if popen2._active:
 | 
						|
        raise ValueError("_active not empty")
 | 
						|
    print "All OK"
 | 
						|
 | 
						|
main()
 | 
						|
_test()
 |