]> granicus.if.org Git - python/commitdiff
Added os.popen2() and os.popen3() for non-Windows platforms.
authorFred Drake <fdrake@acm.org>
Mon, 28 Aug 2000 17:20:05 +0000 (17:20 +0000)
committerFred Drake <fdrake@acm.org>
Mon, 28 Aug 2000 17:20:05 +0000 (17:20 +0000)
Lib/os.py
Lib/popen2.py
Lib/test/output/test_popen2
Lib/test/test_popen2.py

index 59c3895920dad45c85d9632ef14fa5bd2faa69fe..c804c3ab8695aad1b2e9935f2ce91dd55da12a29 100644 (file)
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -454,3 +454,16 @@ otherwise return -SIG, where SIG is the signal that killed it. """
         return spawnvpe(mode, file, args[:-1], env)
 
 
+if not _exists("popen2"):
+    def popen2(cmd, mode="t", bufsize=-1):
+        assert mode[:1] in ("b", "t")
+        import popen2
+        stdout, stdin = popen2.popen2(cmd, bufsize)
+        return stdin, stdout
+
+if not _exists("popen3"):
+    def popen3(cmd, mode="t", bufsize=-1):
+        assert mode[:1] in ("b", "t")
+        import popen2
+        stdout, stdin, stderr = popen2.popen3(cmd, bufsize)
+        return stdin, stdout, stderr
index 2fd9a19786c86bc10196c2b5c87210a5c9f9dd12..e0f2880e7562dc847e42b38a7c6ed5d60e2d8cde 100644 (file)
@@ -89,7 +89,8 @@ class Popen3:
             _active.remove(self)
         return self.sts
 
-if hasattr(os, "popen2"):
+
+if sys.platform[:3] == "win":
     def popen2(cmd, mode='t', bufsize=-1):
         """Execute the shell command 'cmd' in a sub-process.  If 'bufsize' is
         specified, it sets the buffer size for the I/O pipes.  The file objects
@@ -109,7 +110,7 @@ else:
         inst = Popen3(cmd, 0, bufsize)
         return inst.fromchild, inst.tochild
 
-if hasattr(os, "popen3"):
+if sys.platform[:3] == "win":
     def popen3(cmd, mode='t', bufsize=-1):
         """Execute the shell command 'cmd' in a sub-process.  If 'bufsize' is
         specified, it sets the buffer size for the I/O pipes.  The file objects
@@ -129,7 +130,7 @@ else:
         inst = Popen3(cmd, 1, bufsize)
         return inst.fromchild, inst.tochild, inst.childerr
 
-if hasattr(os, "popen4"):
+if sys.platform[:3] == "win":
     def popen4(cmd, mode='t', bufsize=-1):
         """Execute the shell command 'cmd' in a sub-process.  If 'bufsize' is
         specified, it sets the buffer size for the I/O pipes.  The file objects
@@ -139,6 +140,7 @@ if hasattr(os, "popen4"):
 else:
     pass # not yet on unix
 
+
 def _test():
     cmd  = "cat"
     teststr = "abc\n"
index 1fadf1b99f6311a23dcbdfc8e2ae44f0dc3c844a..a66cde934d44f8abf68b90eb87ab755ae3e5592e 100644 (file)
@@ -1,4 +1,9 @@
 test_popen2
+Test popen2 module:
+testing popen2...
+testing popen3...
+All OK
+Testing os module:
 testing popen2...
 testing popen3...
 All OK
index f6359ce2ebf132c579d3b6ff531915c668952971..26ef9d933ede0bac8261cd0286bc83d956822b62 100644 (file)
@@ -3,12 +3,15 @@
    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:
@@ -19,5 +22,35 @@ def main():
     import popen2
     popen2._test()
 
-main()
 
+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()