The command can now either be a string (as before) or a list of
arguments for execvp (for those who don't want the shell's argument
parsing).
diff --git a/Lib/popen2.py b/Lib/popen2.py
index ae89f94..b5defbc 100644
--- a/Lib/popen2.py
+++ b/Lib/popen2.py
@@ -12,7 +12,8 @@
 
 class Popen3:
     def __init__(self, cmd, capturestderr=0):
-	cmd = ['/bin/sh', '-c', cmd]
+	if type(cmd) == type(''):
+	    cmd = ['/bin/sh', '-c', cmd]
 	p2cread, p2cwrite = os.pipe()
 	c2pread, c2pwrite = os.pipe()
 	if capturestderr:
@@ -34,7 +35,7 @@
 		    os.close(i)
 		except: pass
 	    try:
-		os.execv(cmd[0], cmd)
+		os.execvp(cmd[0], cmd)
 	    finally:
 		os._exit(1)
 	    # Shouldn't come here, I guess
@@ -85,7 +86,7 @@
     w.close()
     assert r.read() == teststr
     print "testing popen3..."
-    r, w, e = popen3('cat')
+    r, w, e = popen3(['cat'])
     w.write(teststr)
     w.close()
     assert r.read() == teststr