diff --git a/Doc/howto/functional.rst b/Doc/howto/functional.rst
index faa0418..c71d038 100644
--- a/Doc/howto/functional.rst
+++ b/Doc/howto/functional.rst
@@ -222,10 +222,10 @@
 
 
     for i in iter(obj):
-        print i
+        print(i)
 
     for i in obj:
-        print i
+        print(i)
 
 Iterators can be materialized as lists or tuples by using the :func:`list` or
 :func:`tuple` constructor functions:
@@ -709,7 +709,7 @@
 containing the count and each element. ::
 
     >>> for item in enumerate(['subject', 'verb', 'object']):
-    ...     print item
+    ...     print(item)
     (0, 'subject')
     (1, 'verb')
     (2, 'object')
diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
index e886d86..a5cffdd 100644
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -232,7 +232,7 @@
    >>> from collections import deque
    >>> d = deque('ghi')                 # make a new deque with three items
    >>> for elem in d:                   # iterate over the deque's elements
-   ...     print elem.upper()
+   ...     print(elem.upper())
    G
    H
    I
diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst
index e4aac1a..9401b38 100644
--- a/Doc/library/datetime.rst
+++ b/Doc/library/datetime.rst
@@ -532,7 +532,7 @@
     datetime.date(2002, 3, 11)
     >>> t = d.timetuple()
     >>> for i in t:     # doctest: +SKIP
-    ...     print i
+    ...     print(i)
     2002                # year
     3                   # month
     11                  # day
@@ -544,7 +544,7 @@
     -1
     >>> ic = d.isocalendar()
     >>> for i in ic:    # doctest: +SKIP
-    ...     print i
+    ...     print(i)
     2002                # ISO year
     11                  # ISO week number
     1                   # ISO day number ( 1 = Monday )
@@ -1011,7 +1011,7 @@
     >>> # Using datetime.timetuple() to get tuple of all attributes
     >>> tt = dt.timetuple()
     >>> for it in tt:   # doctest: +SKIP
-    ...     print it
+    ...     print(it)
     ... 
     2006    # year
     11      # month
@@ -1025,7 +1025,7 @@
     >>> # Date in ISO format
     >>> ic = dt.isocalendar()
     >>> for it in ic:   # doctest: +SKIP
-    ...     print it
+    ...     print(it)
     ...
     2006    # ISO year
     47      # ISO week
diff --git a/Doc/library/json.rst b/Doc/library/json.rst
index 79430c3..9f1ebc2 100644
--- a/Doc/library/json.rst
+++ b/Doc/library/json.rst
@@ -17,13 +17,13 @@
     >>> import json
     >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
     '["foo", {"bar": ["baz", null, 1.0, 2]}]'
-    >>> print json.dumps("\"foo\bar")
+    >>> print(json.dumps("\"foo\bar"))
     "\"foo\bar"
-    >>> print json.dumps(u'\u1234')
+    >>> print(json.dumps(u'\u1234'))
     "\u1234"
-    >>> print json.dumps('\\')
+    >>> print(json.dumps('\\'))
     "\\"
-    >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
+    >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
     {"a": 0, "b": 0, "c": 0}
     >>> from StringIO import StringIO
     >>> io = StringIO()
@@ -40,7 +40,7 @@
 Pretty printing::
 
     >>> import json
-    >>> print json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
+    >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
     {
         "4": 5, 
         "6": 7
diff --git a/Doc/library/modulefinder.rst b/Doc/library/modulefinder.rst
index 13ea11d..e9043d2 100644
--- a/Doc/library/modulefinder.rst
+++ b/Doc/library/modulefinder.rst
@@ -32,7 +32,7 @@
    This class provides :meth:`run_script` and :meth:`report` methods to determine
    the set of modules imported by a script. *path* can be a list of directories to
    search for modules; if not specified, ``sys.path`` is used.  *debug* sets the
-   debugging level; higher values make the class print  debugging messages about
+   debugging level; higher values make the class print debugging messages about
    what it's doing. *excludes* is a list of module names to exclude from the
    analysis. *replace_paths* is a list of ``(oldpath, newpath)`` tuples that will
    be replaced in module paths.
@@ -82,14 +82,14 @@
    finder = ModuleFinder()
    finder.run_script('bacon.py')
 
-   print 'Loaded modules:'
-   for name, mod in finder.modules.iteritems():
-       print '%s: ' % name,
-       print ','.join(mod.globalnames.keys()[:3])
+   print('Loaded modules:')
+   for name, mod in finder.modules.items():
+       print('%s: ' % name, end='')
+       print(','.join(mod.globalnames.keys()[:3]))
 
-   print '-'*50
-   print 'Modules not imported:'
-   print '\n'.join(finder.badmodules.iterkeys())
+   print('-'*50)
+   print('Modules not imported:')
+   print('\n'.join(finder.badmodules.keys()))
 
 Sample output (may vary depending on the architecture)::
 
diff --git a/Doc/library/plistlib.rst b/Doc/library/plistlib.rst
index 81b10bc..a71376e 100644
--- a/Doc/library/plistlib.rst
+++ b/Doc/library/plistlib.rst
@@ -104,4 +104,4 @@
 Parsing a plist::
 
     pl = readPlist(pathOrFile)
-    print pl["aKey"]
+    print(pl["aKey"])
diff --git a/Doc/library/sched.rst b/Doc/library/sched.rst
index bb15c76..e0007fc 100644
--- a/Doc/library/sched.rst
+++ b/Doc/library/sched.rst
@@ -52,14 +52,14 @@
     >>> import time
     >>> from threading import Timer
     >>> def print_time():
-    ...     print "From print_time", time.time()
+    ...     print("From print_time", time.time())
     ...
     >>> def print_some_times():
-    ...     print time.time()
+    ...     print(time.time())
     ...     Timer(5, print_time, ()).start()
     ...     Timer(10, print_time, ()).start()
     ...     time.sleep(11)	# sleep while time-delay events execute
-    ...     print time.time()     
+    ...     print(time.time())
     ...
     >>> print_some_times()
     930343690.257
diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index 9a3af1d..d7164da 100644
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -866,7 +866,7 @@
    s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
    
    # receive a package
-   print s.recvfrom(65565)
+   print(s.recvfrom(65565))
    
    # disabled promiscuous mode
    s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)
diff --git a/Doc/library/wsgiref.rst b/Doc/library/wsgiref.rst
index 55d780f..2437bcd 100644
--- a/Doc/library/wsgiref.rst
+++ b/Doc/library/wsgiref.rst
@@ -132,7 +132,7 @@
           return ret
 
       httpd = make_server('', 8000, simple_app)
-      print "Serving on port 8000..."
+      print("Serving on port 8000...")
       httpd.serve_forever()
 
 
diff --git a/Doc/tools/sphinxext/patchlevel.py b/Doc/tools/sphinxext/patchlevel.py
index cb9e35c..821e3be 100644
--- a/Doc/tools/sphinxext/patchlevel.py
+++ b/Doc/tools/sphinxext/patchlevel.py
@@ -63,9 +63,10 @@
         return get_header_version_info('.')
     except (IOError, OSError):
         version, release = get_sys_version_info()
-        print >>sys.stderr, 'Can\'t get version info from Include/patchlevel.h, ' \
-              'using version of this interpreter (%s).' % release
+        print('Can\'t get version info from Include/patchlevel.h, '
+              'using version of this interpreter (%s).' % release,
+              file=sys.stderr)
         return version, release
 
 if __name__ == '__main__':
-    print get_header_version_info('.')[1]
+    print(get_header_version_info('.')[1])
diff --git a/Doc/tutorial/datastructures.rst b/Doc/tutorial/datastructures.rst
index 7999e0d..8e4f053 100644
--- a/Doc/tutorial/datastructures.rst
+++ b/Doc/tutorial/datastructures.rst
@@ -239,7 +239,7 @@
 Now, if you wanted to swap rows and columns, you could use a list 
 comprehension::
 
-    >>> print [[row[i] for row in mat] for i in [0, 1, 2]]
+    >>> print([[row[i] for row in mat] for i in [0, 1, 2]])
     [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
 
 Special care has to be taken for the *nested* list comprehension:
@@ -251,7 +251,7 @@
 
     for i in [0, 1, 2]:
         for row in mat:
-            print row[i],
+            print(row[i], end="")
         print
 
 In real world, you should prefer builtin functions to complex flow statements. 
diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst
index a9687e5..66213c5 100644
--- a/Doc/tutorial/errors.rst
+++ b/Doc/tutorial/errors.rst
@@ -132,7 +132,7 @@
        s = f.readline()
        i = int(s.strip())
    except IOError as (errno, strerror):
-       print "I/O error(%s): %s" % (errno, strerror)
+       print("I/O error(%s): %s" % (errno, strerror))
    except ValueError:
        print("Could not convert data to an integer.")
    except:
diff --git a/Lib/bsddb/dbrecio.py b/Lib/bsddb/dbrecio.py
index 949a3a2..6036b3a 100644
--- a/Lib/bsddb/dbrecio.py
+++ b/Lib/bsddb/dbrecio.py
@@ -158,14 +158,14 @@
     if f.getvalue() != text:
         raise RuntimeError, 'write failed'
     length = f.tell()
-    print 'File length =', length
+    print('File length =', length)
     f.seek(len(lines[0]))
     f.write(lines[1])
     f.seek(0)
-    print 'First line =', repr(f.readline())
+    print('First line =', repr(f.readline()))
     here = f.tell()
     line = f.readline()
-    print 'Second line =', repr(line)
+    print('Second line =', repr(line))
     f.seek(-len(line), 1)
     line2 = f.read(len(line))
     if line != line2:
@@ -177,8 +177,8 @@
     line2 = f.read()
     if line != line2:
         raise RuntimeError, 'bad result after seek back from EOF'
-    print 'Read', len(list), 'more lines'
-    print 'File length =', f.tell()
+    print('Read', len(list), 'more lines')
+    print('File length =', f.tell())
     if f.tell() != length:
         raise RuntimeError, 'bad length'
     f.close()
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 7799232..16f9ccf 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -1273,7 +1273,7 @@
         Run $IDLESTARTUP or $PYTHONSTARTUP, edit foo.py, and open a shell
         window with the title "Baz".
 
-idle -c "import sys; print sys.argv" "foo"
+idle -c "import sys; print(sys.argv)" "foo"
         Open a shell window and run the command, passing "-c" in sys.argv[0]
         and "foo" in sys.argv[1].
 
@@ -1282,7 +1282,7 @@
         run foo.py, passing "foo.py" in sys.argv[0] and "Hello World" in
         sys.argv[1].
 
-echo "import sys; print sys.argv" | idle - "foobar"
+echo "import sys; print(sys.argv)" | idle - "foobar"
         Open a shell window, run the script piped in, passing '' in sys.argv[0]
         and "foobar" in sys.argv[1].
 """
diff --git a/Lib/os.py b/Lib/os.py
index b6e1570..b5ade28 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -254,9 +254,9 @@
     import os
     from os.path import join, getsize
     for root, dirs, files in os.walk('python/Lib/email'):
-        print root, "consumes",
-        print sum([getsize(join(root, name)) for name in files]),
-        print "bytes in", len(files), "non-directory files"
+        print(root, "consumes", end="")
+        print(sum([getsize(join(root, name)) for name in files]), end="")
+        print("bytes in", len(files), "non-directory files")
         if 'CVS' in dirs:
             dirs.remove('CVS')  # don't visit CVS directories
     """
diff --git a/Lib/pdb.py b/Lib/pdb.py
index a6355ec..d77ea28 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -500,7 +500,8 @@
         try:
             bp = bdb.Breakpoint.bpbynumber[bpnum]
         except IndexError:
-            print >>self.stdout, 'Breakpoint index %r is not valid' % args[0]
+            print('Breakpoint index %r is not valid' % args[0],
+                  file=self.stdout)
             return
         if bp:
             bp.cond = cond
@@ -524,7 +525,8 @@
         try:
             bp = bdb.Breakpoint.bpbynumber[bpnum]
         except IndexError:
-            print >>self.stdout, 'Breakpoint index %r is not valid' % args[0]
+            print('Breakpoint index %r is not valid' % args[0],
+                  file=self.stdout)
             return
         if bp:
             bp.ignore = count
diff --git a/Lib/test/test_global.py b/Lib/test/test_global.py
index 22e4b25..2a58a10 100644
--- a/Lib/test/test_global.py
+++ b/Lib/test/test_global.py
@@ -21,7 +21,7 @@
     def test2(self):
         prog_text_2 = """\
 def wrong2():
-    print x
+    print(x)
     global x
 """
         check_syntax_error(self, prog_text_2)
@@ -29,7 +29,7 @@
     def test3(self):
         prog_text_3 = """\
 def wrong3():
-    print x
+    print(x)
     x = 2
     global x
 """
diff --git a/Lib/test/test_popen.py b/Lib/test/test_popen.py
index 397e4a3..209bb13 100644
--- a/Lib/test/test_popen.py
+++ b/Lib/test/test_popen.py
@@ -10,7 +10,7 @@
 
 # Test that command-lines get down as we expect.
 # To do this we execute:
-#    python -c "import sys;print sys.argv" {rest_of_commandline}
+#    python -c "import sys;print(sys.argv)" {rest_of_commandline}
 # This results in Python being spawned and printing the sys.argv list.
 # We can then eval() the result of this, and see what each argv was.
 python = sys.executable
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 92592eb..62d327e 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -481,7 +481,7 @@
     Example use (with 'stream_name=stdout')::
 
        with captured_stdout() as s:
-           print "hello"
+           print("hello")
        assert s.getvalue() == "hello"
     """
     import io
diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py
index 371e2b9..ea9030b 100644
--- a/Lib/test/test_tokenize.py
+++ b/Lib/test/test_tokenize.py
@@ -89,7 +89,7 @@
     >>> roundtrip("try: import somemodule\\n"
     ...           "except ImportError: # comment\\n"
     ...           "    print('Can not import' # comment2\\n)"
-    ...           "else:   print 'Loaded'\\n")
+    ...           "else:   print('Loaded')\\n")
     True
 
 Balancing continuation
