diff --git a/Lib/os.py b/Lib/os.py
index 991716e..206aa37 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -666,9 +666,15 @@
             is a string it will be passed to the shell (as with os.system()). If
             'bufsize' is specified, it sets the buffer size for the I/O pipes.  The
             file objects (child_stdin, child_stdout) are returned."""
-            import popen2
-            stdout, stdin = popen2.popen2(cmd, bufsize)
-            return stdin, stdout
+            import warnings
+            msg = "os.popen2 is deprecated.  Use the subprocess module."
+            warnings.warn(msg, DeprecationWarning, stacklevel=2)
+
+            import subprocess
+            PIPE = subprocess.PIPE
+            p = subprocess.Popen(cmd, shell=True, bufsize=bufsize,
+                                 stdin=PIPE, stdout=PIPE, close_fds=True)
+            return p.stdin, p.stdout
         __all__.append("popen2")
 
     if not _exists("popen3"):
@@ -679,9 +685,16 @@
             is a string it will be passed to the shell (as with os.system()). If
             'bufsize' is specified, it sets the buffer size for the I/O pipes.  The
             file objects (child_stdin, child_stdout, child_stderr) are returned."""
-            import popen2
-            stdout, stdin, stderr = popen2.popen3(cmd, bufsize)
-            return stdin, stdout, stderr
+            import warnings
+            msg = "os.popen3 is deprecated.  Use the subprocess module."
+            warnings.warn(msg, DeprecationWarning, stacklevel=2)
+
+            import subprocess
+            PIPE = subprocess.PIPE
+            p = subprocess.Popen(cmd, shell=True, bufsize=bufsize,
+                                 stdin=PIPE, stdout=PIPE, stderr=PIPE,
+                                 close_fds=True)
+            return p.stdin, p.stdout, p.stderr
         __all__.append("popen3")
 
     if not _exists("popen4"):
@@ -692,9 +705,16 @@
             is a string it will be passed to the shell (as with os.system()). If
             'bufsize' is specified, it sets the buffer size for the I/O pipes.  The
             file objects (child_stdin, child_stdout_stderr) are returned."""
-            import popen2
-            stdout, stdin = popen2.popen4(cmd, bufsize)
-            return stdin, stdout
+            import warnings
+            msg = "os.popen4 is deprecated.  Use the subprocess module."
+            warnings.warn(msg, DeprecationWarning, stacklevel=2)
+
+            import subprocess
+            PIPE = subprocess.PIPE
+            p = subprocess.Popen(cmd, shell=True, bufsize=bufsize,
+                                 stdin=PIPE, stdout=PIPE,
+                                 stderr=subprocess.STDOUT, close_fds=True)
+            return p.stdin, p.stdout
         __all__.append("popen4")
 
 import copy_reg as _copy_reg
diff --git a/Lib/plat-mac/pimp.py b/Lib/plat-mac/pimp.py
index 456427c..e58f36d 100644
--- a/Lib/plat-mac/pimp.py
+++ b/Lib/plat-mac/pimp.py
@@ -14,7 +14,7 @@
 """
 import sys
 import os
-import popen2
+import subprocess
 import urllib
 import urllib2
 import urlparse
@@ -101,10 +101,11 @@
         output.write("+ %s\n" % cmd)
     if NO_EXECUTE:
         return 0
-    child = popen2.Popen4(cmd)
-    child.tochild.close()
+    child = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE,
+                             stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    child.stdin.close()
     while 1:
-        line = child.fromchild.readline()
+        line = child.stdout.readline()
         if not line:
             break
         if output:
diff --git a/Lib/popen2.py b/Lib/popen2.py
index ab30463..145b340 100644
--- a/Lib/popen2.py
+++ b/Lib/popen2.py
@@ -8,6 +8,9 @@
 
 import os
 import sys
+import warnings
+warnings.warn("The popen2 module is deprecated.  Use the subprocess module.",
+              DeprecationWarning, stacklevel=2)
 
 __all__ = ["popen2", "popen3", "popen4"]
 
diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py
index 5e7d34e..2b9f1de 100644
--- a/Lib/test/test___all__.py
+++ b/Lib/test/test___all__.py
@@ -9,6 +9,8 @@
                         "<string>")
 warnings.filterwarnings("ignore", "the sets module is deprecated",
                         DeprecationWarning, "<string>")
+warnings.filterwarnings("ignore", ".*popen2 module is deprecated.*",
+                        DeprecationWarning)
 
 class AllTest(unittest.TestCase):
 
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py
index 709850d..b8b3c03 100644
--- a/Lib/test/test_bz2.py
+++ b/Lib/test/test_bz2.py
@@ -5,7 +5,7 @@
 import unittest
 from cStringIO import StringIO
 import os
-import popen2
+import subprocess
 import sys
 
 import bz2
@@ -21,18 +21,20 @@
 
     if has_cmdline_bunzip2:
         def decompress(self, data):
-            pop = popen2.Popen3("bunzip2", capturestderr=1)
-            pop.tochild.write(data)
-            pop.tochild.close()
-            ret = pop.fromchild.read()
-            pop.fromchild.close()
+            pop = subprocess.Popen("bunzip2", shell=True,
+                                   stdin=subprocess.PIPE,
+                                   stdout=subprocess.PIPE,
+                                   stderr=subprocess.STDOUT)
+            pop.stdin.write(data)
+            pop.stdin.close()
+            ret = pop.stdout.read()
+            pop.stdout.close()
             if pop.wait() != 0:
                 ret = bz2.decompress(data)
             return ret
 
     else:
-        # popen2.Popen3 doesn't exist on Windows, and even if it did, bunzip2
-        # isn't available to run.
+        # bunzip2 isn't available to run on Windows.
         def decompress(self, data):
             return bz2.decompress(data)
 
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index cacae7a..d3f07c7 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -1,18 +1,19 @@
 
 import test.test_support, unittest
 import sys
-import popen2
 import subprocess
 
 class CmdLineTest(unittest.TestCase):
     def start_python(self, cmd_line):
-        outfp, infp = popen2.popen4('"%s" %s' % (sys.executable, cmd_line))
-        infp.close()
-        data = outfp.read()
-        outfp.close()
+        cmd = '"%s" %s' % (sys.executable, cmd_line)
+        p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE,
+                             stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+        p.stdin.close()
+        data = p.stdout.read()
+        p.stdout.close()
         # try to cleanup the child so we don't appear to leak when running
         # with regrtest -R.  This should be a no-op on Windows.
-        popen2._cleanup()
+        subprocess._cleanup()
         return data
 
     def exit_code(self, *args):
diff --git a/Lib/test/test_popen2.py b/Lib/test/test_popen2.py
index 31f22d6..023871f 100644
--- a/Lib/test/test_popen2.py
+++ b/Lib/test/test_popen2.py
@@ -1,6 +1,12 @@
 #! /usr/bin/env python
 """Test script for popen2.py"""
 
+import warnings
+warnings.filterwarnings("ignore", ".*popen2 module is deprecated.*",
+                        DeprecationWarning)
+warnings.filterwarnings("ignore", "os\.popen. is deprecated.*",
+                        DeprecationWarning)
+
 import os
 import sys
 import unittest
