diff mbox series

[ovs-dev,v2,1/2] Remove Python 2 leftovers.

Message ID 20210609212546.60034-1-roriorde@redhat.com
State Changes Requested
Headers show
Series [ovs-dev,v2,1/2] Remove Python 2 leftovers. | expand

Commit Message

Rosemarie O'Riorden June 9, 2021, 9:25 p.m. UTC
Fixes: 1ca0323e7c29 ("Require Python 3 and remove support for Python 2.")
Reported at: https://bugzilla.redhat.com/show_bug.cgi?id=1949875
Signed-off-by: Rosemarie O'Riorden <roriorde@redhat.com>
---
Fix import errors in v1.
Remove lines that indicate compatibility with python 2.

 ofproto/ipfix-gen-entities                    |  2 --
 ovsdb/ovsdb-idlc.in                           |  1 -
 .../ovs/compat/sortedcontainers/sortedlist.py |  2 --
 python/ovstest/tests.py                       |  2 --
 python/ovstest/util.py                        |  2 +-
 python/setup.py                               |  4 ---
 tests/test-jsonrpc.py                         |  2 --
 utilities/checkpatch.py                       |  1 -
 utilities/gdb/ovs_gdb.py                      |  1 -
 utilities/ovs-l3ping.in                       | 14 +++++-----
 utilities/ovs-parse-backtrace.in              | 12 ++++----
 utilities/ovs-pcap.in                         |  4 +--
 utilities/ovs-vlan-test.in                    | 28 +++++++++----------
 13 files changed, 29 insertions(+), 46 deletions(-)

Comments

Timothy Redaelli June 10, 2021, 5:48 p.m. UTC | #1
On Wed,  9 Jun 2021 17:25:45 -0400
Rosemarie O'Riorden <roriorde@redhat.com> wrote:

> Fixes: 1ca0323e7c29 ("Require Python 3 and remove support for Python 2.")
> Reported at: https://bugzilla.redhat.com/show_bug.cgi?id=1949875
> Signed-off-by: Rosemarie O'Riorden <roriorde@redhat.com>
> ---
> Fix import errors in v1.
> Remove lines that indicate compatibility with python 2.
> 
>  ofproto/ipfix-gen-entities                    |  2 --
>  ovsdb/ovsdb-idlc.in                           |  1 -
>  .../ovs/compat/sortedcontainers/sortedlist.py |  2 --
>  python/ovstest/tests.py                       |  2 --
>  python/ovstest/util.py                        |  2 +-
>  python/setup.py                               |  4 ---
>  tests/test-jsonrpc.py                         |  2 --
>  utilities/checkpatch.py                       |  1 -
>  utilities/gdb/ovs_gdb.py                      |  1 -
>  utilities/ovs-l3ping.in                       | 14 +++++-----
>  utilities/ovs-parse-backtrace.in              | 12 ++++----
>  utilities/ovs-pcap.in                         |  4 +--
>  utilities/ovs-vlan-test.in                    | 28 +++++++++----------
>  13 files changed, 29 insertions(+), 46 deletions(-)

Hi,
thank you for your work.

It looks almost good and it passes "make flake8-check". I only added a
small suggestion (see inline), but LTGM.

> diff --git a/ofproto/ipfix-gen-entities b/ofproto/ipfix-gen-entities
> index d5abe9c2e..dcecdab21 100755
> --- a/ofproto/ipfix-gen-entities
> +++ b/ofproto/ipfix-gen-entities
> @@ -7,8 +7,6 @@
>  # notice and this notice are preserved.  This file is offered as-is,
>  # without warranty of any kind.
>  
> -from __future__ import print_function
> -
>  import getopt
>  import re
>  import sys
> diff --git a/ovsdb/ovsdb-idlc.in b/ovsdb/ovsdb-idlc.in
> index 5914e0878..61cded16d 100755
> --- a/ovsdb/ovsdb-idlc.in
> +++ b/ovsdb/ovsdb-idlc.in
> @@ -1,6 +1,5 @@
>  #! @PYTHON3@
>  
> -from __future__ import print_function
>  import getopt
>  import os
>  import re
> diff --git a/python/ovs/compat/sortedcontainers/sortedlist.py b/python/ovs/compat/sortedcontainers/sortedlist.py
> index 8aec6bbac..ba5556692 100644
> --- a/python/ovs/compat/sortedcontainers/sortedlist.py
> +++ b/python/ovs/compat/sortedcontainers/sortedlist.py
> @@ -3,8 +3,6 @@
>  """
>  # pylint: disable=redefined-builtin, ungrouped-imports
>  
> -from __future__ import print_function
> -
>  from bisect import bisect_left, bisect_right, insort
>  from collections import Sequence, MutableSequence
>  from functools import wraps
> diff --git a/python/ovstest/tests.py b/python/ovstest/tests.py
> index 6de3cc3af..f959f945e 100644
> --- a/python/ovstest/tests.py
> +++ b/python/ovstest/tests.py
> @@ -10,8 +10,6 @@
>  # See the License for the specific language governing permissions and
>  # limitations under the License.
>  
> -from __future__ import print_function
> -
>  import math
>  import time
>  
> diff --git a/python/ovstest/util.py b/python/ovstest/util.py
> index 72457158f..4caf6c352 100644
> --- a/python/ovstest/util.py
> +++ b/python/ovstest/util.py
> @@ -26,7 +26,7 @@ import socket
>  import struct
>  import subprocess
>  
> -import exceptions
> +import builtins as exceptions

Nit: to avoid possibile misunderstanding since calling builtins
"exceptions" is semantically wrong. Since exceptions is only used for a
single except I guest we could just change the line that uses exceptions
to do directly "except OSError:"

>  import xmlrpc.client
>  
> diff --git a/python/setup.py b/python/setup.py
> index d385d8372..cfe01763f 100644
> --- a/python/setup.py
> +++ b/python/setup.py
> @@ -10,8 +10,6 @@
>  # See the License for the specific language governing permissions and
>  # limitations under the License.
>  
> -from __future__ import print_function
> -
>  import sys
>  
>  from distutils.command.build_ext import build_ext
> @@ -82,8 +80,6 @@ setup_args = dict(
>          'Topic :: Software Development :: Libraries :: Python Modules',
>          'Topic :: System :: Networking',
>          'License :: OSI Approved :: Apache Software License',
> -        'Programming Language :: Python :: 2',
> -        'Programming Language :: Python :: 2.7',
>          'Programming Language :: Python :: 3',
>          'Programming Language :: Python :: 3.4',
>          'Programming Language :: Python :: 3.5',
> diff --git a/tests/test-jsonrpc.py b/tests/test-jsonrpc.py
> index 3eabcd78d..1df5afa22 100644
> --- a/tests/test-jsonrpc.py
> +++ b/tests/test-jsonrpc.py
> @@ -12,8 +12,6 @@
>  # See the License for the specific language governing permissions and
>  # limitations under the License.
>  
> -from __future__ import print_function
> -
>  import argparse
>  import errno
>  import os
> diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py
> index bc6bfae15..ac14da29b 100755
> --- a/utilities/checkpatch.py
> +++ b/utilities/checkpatch.py
> @@ -13,7 +13,6 @@
>  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>  # See the License for the specific language governing permissions and
>  # limitations under the License.
> -from __future__ import print_function
>  
>  import email
>  import getopt
> diff --git a/utilities/gdb/ovs_gdb.py b/utilities/gdb/ovs_gdb.py
> index 1111f3100..0b2ecb81b 100644
> --- a/utilities/gdb/ovs_gdb.py
> +++ b/utilities/gdb/ovs_gdb.py
> @@ -55,7 +55,6 @@
>  #    ...
>  #    ...
>  #
> -from __future__ import print_function
>  import gdb
>  import sys
>  import uuid
> diff --git a/utilities/ovs-l3ping.in b/utilities/ovs-l3ping.in
> index 92d32acb3..1ece06457 100644
> --- a/utilities/ovs-l3ping.in
> +++ b/utilities/ovs-l3ping.in
> @@ -19,7 +19,7 @@ achieved by tunneling the control connection inside the tunnel itself.
>  """
>  
>  import socket
> -import xmlrpclib
> +import xmlrpc.client
>  
>  import ovstest.args as args
>  import ovstest.tests as tests
> @@ -64,13 +64,13 @@ if __name__ == '__main__':
>              ps = get_packet_sizes(me, he, args.client[0])
>              tests.do_direct_tests(me, he, bandwidth, interval, ps)
>      except KeyboardInterrupt:
> -        print "Terminating"
> -    except xmlrpclib.Fault:
> -        print "Couldn't contact peer"
> +        print("Terminating")
> +    except xmlrpc.client.Fault:
> +        print("Couldn't contact peer")
>      except socket.error:
> -        print "Couldn't contact peer"
> -    except xmlrpclib.ProtocolError:
> -        print "XMLRPC control channel was abruptly terminated"
> +        print("Couldn't contact peer")
> +    except xmlrpc.client.ProtocolError:
> +        print("XMLRPC control channel was abruptly terminated")
>      finally:
>          if local_server is not None:
>              local_server.terminate()
> diff --git a/utilities/ovs-parse-backtrace.in b/utilities/ovs-parse-backtrace.in
> index d5506769a..f44f05cd1 100755
> --- a/utilities/ovs-parse-backtrace.in
> +++ b/utilities/ovs-parse-backtrace.in
> @@ -70,7 +70,7 @@ result.  Expected usage is for ovs-appctl backtrace to be piped in.""")
>          if os.path.exists(debug):
>              binary = debug
>  
> -    print "Binary: %s\n" % binary
> +    print("Binary: %s\n" % binary)
>  
>      stdin = sys.stdin.read()
>  
> @@ -88,15 +88,15 @@ result.  Expected usage is for ovs-appctl backtrace to be piped in.""")
>      for lines, count in traces:
>          longest = max(len(l) for l in lines)
>  
> -        print "Backtrace Count: %d" % count
> +        print("Backtrace Count: %d" % count)
>          for line in lines:
>              match = re.search(r'\[(0x.*)]', line)
>              if match:
> -                print "%s %s" % (line.ljust(longest),
> -                                 addr2line(binary, match.group(1)))
> +                print("%s %s" % (line.ljust(longest),
> +                                 addr2line(binary, match.group(1))))
>              else:
> -                print line
> -        print
> +                print(line)
> +        print()
>  
>  
>  if __name__ == "__main__":
> diff --git a/utilities/ovs-pcap.in b/utilities/ovs-pcap.in
> index dddbee4df..6b5f63399 100755
> --- a/utilities/ovs-pcap.in
> +++ b/utilities/ovs-pcap.in
> @@ -14,8 +14,6 @@
>  # See the License for the specific language governing permissions and
>  # limitations under the License.
>  
> -from __future__ import print_function
> -
>  import binascii
>  import getopt
>  import struct
> @@ -79,7 +77,7 @@ if __name__ == "__main__":
>          try:
>              options, args = getopt.gnu_getopt(sys.argv[1:], 'hV',
>                                                ['help', 'version'])
> -        except getopt.GetoptException as geo:
> +        except getopt.GetoptError as geo:
>              sys.stderr.write("%s: %s\n" % (argv0, geo.msg))
>              sys.exit(1)
>  
> diff --git a/utilities/ovs-vlan-test.in b/utilities/ovs-vlan-test.in
> index 154573a9b..de3ae1686 100755
> --- a/utilities/ovs-vlan-test.in
> +++ b/utilities/ovs-vlan-test.in
> @@ -14,9 +14,9 @@
>  # See the License for the specific language governing permissions and
>  # limitations under the License.
>  
> -import BaseHTTPServer
>  import getopt
> -import httplib
> +import http.client
> +import http.server
>  import os
>  import threading
>  import time
> @@ -84,7 +84,7 @@ class UDPReceiver:
>  
>          try:
>              sock.bind((self.vlan_ip, self.vlan_port))
> -        except socket.error, e:
> +        except socket.error as e:
>              print_safe('Failed to bind to %s:%d with error: %s'
>                      % (self.vlan_ip, self.vlan_port, e))
>              os._exit(1) #sys.exit only exits the current thread.
> @@ -95,7 +95,7 @@ class UDPReceiver:
>                  data, _ = sock.recvfrom(4096)
>              except socket.timeout:
>                  continue
> -            except socket.error, e:
> +            except socket.error as e:
>                  print_safe('Failed to receive from %s:%d with error: %s'
>                      % (self.vlan_ip, self.vlan_port, e))
>                  os._exit(1)
> @@ -180,7 +180,7 @@ class VlanServer:
>              for _ in range(send_time * 2):
>                  try:
>                      send_packet(test_id, size, ip, port)
> -                except socket.error, e:
> +                except socket.error as e:
>                      self.set_result(test_id, 'Failure: ' + str(e))
>                      return
>                  time.sleep(.5)
> @@ -194,15 +194,15 @@ class VlanServer:
>      def run(self):
>          self.udp_recv.start()
>          try:
> -            BaseHTTPServer.HTTPServer((self.server_ip, self.server_port),
> +            http.server.HTTPServer((self.server_ip, self.server_port),
>                      VlanServerHandler).serve_forever()
> -        except socket.error, e:
> +        except socket.error as e:
>              print_safe('Failed to start control server: %s' % e)
>              self.udp_recv.stop()
>  
>          return 1
>  
> -class VlanServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
> +class VlanServerHandler(http.server.BaseHTTPRequestHandler):
>      def do_GET(self):
>  
>          #Guarantee three arguments.
> @@ -244,7 +244,7 @@ class VlanClient:
>          self.udp_recv       = UDPReceiver(vlan_ip, vlan_port)
>  
>      def request(self, resource):
> -        conn = httplib.HTTPConnection(self.server_ip_port)
> +        conn = http.client.HTTPConnection(self.server_ip_port)
>          conn.request('GET', resource)
>          return conn
>  
> @@ -256,7 +256,7 @@ class VlanClient:
>          try:
>              conn = self.request('/start/recv')
>              data = conn.getresponse().read()
> -        except (socket.error, httplib.HTTPException), e:
> +        except (socket.error, http.client.HTTPException) as e:
>              error_msg(e)
>              return False
>  
> @@ -277,7 +277,7 @@ class VlanClient:
>                  send_packet(test_id, size, ip, port)
>                  resp = self.request('/result/%d' % test_id).getresponse()
>                  data = resp.read()
> -            except (socket.error, httplib.HTTPException), e:
> +            except (socket.error, http.client.HTTPException) as e:
>                  error_msg(e)
>                  return False
>  
> @@ -302,7 +302,7 @@ class VlanClient:
>          try:
>              conn    = self.request(resource)
>              test_id = conn.getresponse().read()
> -        except (socket.error, httplib.HTTPException), e:
> +        except (socket.error, http.client.HTTPException) as e:
>              error_msg(e)
>              return False
>  
> @@ -335,7 +335,7 @@ class VlanClient:
>          try:
>              resp = self.request('/ping').getresponse()
>              data = resp.read()
> -        except (socket.error, httplib.HTTPException), e:
> +        except (socket.error, http.client.HTTPException) as e:
>              error_msg(e)
>              return False
>  
> @@ -383,7 +383,7 @@ def main():
>      try:
>          options, args = getopt.gnu_getopt(sys.argv[1:], 'hVs',
>                                            ['help', 'version', 'server'])
> -    except getopt.GetoptError, geo:
> +    except getopt.GetoptError as geo:
>          print_safe('%s: %s\n' % (sys.argv[0], geo.msg))
>          return 1
>
Ilya Maximets June 11, 2021, 3:17 p.m. UTC | #2
On 6/9/21 11:25 PM, Rosemarie O'Riorden wrote:
> Fixes: 1ca0323e7c29 ("Require Python 3 and remove support for Python 2.")
> Reported at: https://bugzilla.redhat.com/show_bug.cgi?id=1949875
> Signed-off-by: Rosemarie O'Riorden <roriorde@redhat.com>
> ---
> Fix import errors in v1.
> Remove lines that indicate compatibility with python 2.
> 
>  ofproto/ipfix-gen-entities                    |  2 --
>  ovsdb/ovsdb-idlc.in                           |  1 -
>  .../ovs/compat/sortedcontainers/sortedlist.py |  2 --
>  python/ovstest/tests.py                       |  2 --
>  python/ovstest/util.py                        |  2 +-
>  python/setup.py                               |  4 ---
>  tests/test-jsonrpc.py                         |  2 --
>  utilities/checkpatch.py                       |  1 -
>  utilities/gdb/ovs_gdb.py                      |  1 -
>  utilities/ovs-l3ping.in                       | 14 +++++-----
>  utilities/ovs-parse-backtrace.in              | 12 ++++----
>  utilities/ovs-pcap.in                         |  4 +--
>  utilities/ovs-vlan-test.in                    | 28 +++++++++----------
>  13 files changed, 29 insertions(+), 46 deletions(-)

Hi, Rosemarie.  Thanks for v2!

I see at least few more files not covered by this patch:

1. python/ovstest/rpcserver.py

It has some problems with imports.  At least it imports wrong 'util'
module.  All local imports in this file should be converted to
relative imports, e.g. with 'from . import something',  otherwise
python3 will use absolute import and will get something unexpected.
This should be fixed for 'util', 'tcp', 'udp' and 'vswitch' imports.

And there is also issue with exceptions similar to what Timothy
reported for the other file.

(For some reason importing of twisted + pylint doesn't work for
me inside the virtual environment, but that is not the issue of OVS)

2. python/ovstest/vswitch.py

It has same issue with import of 'util'.  Import should be relative.
There are might be some other places there similar issues should
be fixed.

3. python/ovstest/tcp.py

This one is tricky as the issue cannot be caught by static analysis.
If you'll try to run it, it will throw exception like this:

  Traceback (most recent call last):
  File "ovs-python-env/lib64/python3.8/site-packages/zope/interface/declarations.py", line 778, in implements
    raise TypeError(_ADVICE_ERROR % 'implementer')
  TypeError: Class advice impossible in Python3.  Use the @implementer class decorator instead.

So, the implements() stuff in this file should be turned into a
decorator.  Something like this:

  from zope.interface.declarations import implementer

  @implementer(interfaces.IPushProducer)
  class Producer(object):
      ...

Best regards, Ilya Maximets.
diff mbox series

Patch

diff --git a/ofproto/ipfix-gen-entities b/ofproto/ipfix-gen-entities
index d5abe9c2e..dcecdab21 100755
--- a/ofproto/ipfix-gen-entities
+++ b/ofproto/ipfix-gen-entities
@@ -7,8 +7,6 @@ 
 # notice and this notice are preserved.  This file is offered as-is,
 # without warranty of any kind.
 
-from __future__ import print_function
-
 import getopt
 import re
 import sys
diff --git a/ovsdb/ovsdb-idlc.in b/ovsdb/ovsdb-idlc.in
index 5914e0878..61cded16d 100755
--- a/ovsdb/ovsdb-idlc.in
+++ b/ovsdb/ovsdb-idlc.in
@@ -1,6 +1,5 @@ 
 #! @PYTHON3@
 
-from __future__ import print_function
 import getopt
 import os
 import re
diff --git a/python/ovs/compat/sortedcontainers/sortedlist.py b/python/ovs/compat/sortedcontainers/sortedlist.py
index 8aec6bbac..ba5556692 100644
--- a/python/ovs/compat/sortedcontainers/sortedlist.py
+++ b/python/ovs/compat/sortedcontainers/sortedlist.py
@@ -3,8 +3,6 @@ 
 """
 # pylint: disable=redefined-builtin, ungrouped-imports
 
-from __future__ import print_function
-
 from bisect import bisect_left, bisect_right, insort
 from collections import Sequence, MutableSequence
 from functools import wraps
diff --git a/python/ovstest/tests.py b/python/ovstest/tests.py
index 6de3cc3af..f959f945e 100644
--- a/python/ovstest/tests.py
+++ b/python/ovstest/tests.py
@@ -10,8 +10,6 @@ 
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import print_function
-
 import math
 import time
 
diff --git a/python/ovstest/util.py b/python/ovstest/util.py
index 72457158f..4caf6c352 100644
--- a/python/ovstest/util.py
+++ b/python/ovstest/util.py
@@ -26,7 +26,7 @@  import socket
 import struct
 import subprocess
 
-import exceptions
+import builtins as exceptions
 
 import xmlrpc.client
 
diff --git a/python/setup.py b/python/setup.py
index d385d8372..cfe01763f 100644
--- a/python/setup.py
+++ b/python/setup.py
@@ -10,8 +10,6 @@ 
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import print_function
-
 import sys
 
 from distutils.command.build_ext import build_ext
@@ -82,8 +80,6 @@  setup_args = dict(
         'Topic :: Software Development :: Libraries :: Python Modules',
         'Topic :: System :: Networking',
         'License :: OSI Approved :: Apache Software License',
-        'Programming Language :: Python :: 2',
-        'Programming Language :: Python :: 2.7',
         'Programming Language :: Python :: 3',
         'Programming Language :: Python :: 3.4',
         'Programming Language :: Python :: 3.5',
diff --git a/tests/test-jsonrpc.py b/tests/test-jsonrpc.py
index 3eabcd78d..1df5afa22 100644
--- a/tests/test-jsonrpc.py
+++ b/tests/test-jsonrpc.py
@@ -12,8 +12,6 @@ 
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import print_function
-
 import argparse
 import errno
 import os
diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py
index bc6bfae15..ac14da29b 100755
--- a/utilities/checkpatch.py
+++ b/utilities/checkpatch.py
@@ -13,7 +13,6 @@ 
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-from __future__ import print_function
 
 import email
 import getopt
diff --git a/utilities/gdb/ovs_gdb.py b/utilities/gdb/ovs_gdb.py
index 1111f3100..0b2ecb81b 100644
--- a/utilities/gdb/ovs_gdb.py
+++ b/utilities/gdb/ovs_gdb.py
@@ -55,7 +55,6 @@ 
 #    ...
 #    ...
 #
-from __future__ import print_function
 import gdb
 import sys
 import uuid
diff --git a/utilities/ovs-l3ping.in b/utilities/ovs-l3ping.in
index 92d32acb3..1ece06457 100644
--- a/utilities/ovs-l3ping.in
+++ b/utilities/ovs-l3ping.in
@@ -19,7 +19,7 @@  achieved by tunneling the control connection inside the tunnel itself.
 """
 
 import socket
-import xmlrpclib
+import xmlrpc.client
 
 import ovstest.args as args
 import ovstest.tests as tests
@@ -64,13 +64,13 @@  if __name__ == '__main__':
             ps = get_packet_sizes(me, he, args.client[0])
             tests.do_direct_tests(me, he, bandwidth, interval, ps)
     except KeyboardInterrupt:
-        print "Terminating"
-    except xmlrpclib.Fault:
-        print "Couldn't contact peer"
+        print("Terminating")
+    except xmlrpc.client.Fault:
+        print("Couldn't contact peer")
     except socket.error:
-        print "Couldn't contact peer"
-    except xmlrpclib.ProtocolError:
-        print "XMLRPC control channel was abruptly terminated"
+        print("Couldn't contact peer")
+    except xmlrpc.client.ProtocolError:
+        print("XMLRPC control channel was abruptly terminated")
     finally:
         if local_server is not None:
             local_server.terminate()
diff --git a/utilities/ovs-parse-backtrace.in b/utilities/ovs-parse-backtrace.in
index d5506769a..f44f05cd1 100755
--- a/utilities/ovs-parse-backtrace.in
+++ b/utilities/ovs-parse-backtrace.in
@@ -70,7 +70,7 @@  result.  Expected usage is for ovs-appctl backtrace to be piped in.""")
         if os.path.exists(debug):
             binary = debug
 
-    print "Binary: %s\n" % binary
+    print("Binary: %s\n" % binary)
 
     stdin = sys.stdin.read()
 
@@ -88,15 +88,15 @@  result.  Expected usage is for ovs-appctl backtrace to be piped in.""")
     for lines, count in traces:
         longest = max(len(l) for l in lines)
 
-        print "Backtrace Count: %d" % count
+        print("Backtrace Count: %d" % count)
         for line in lines:
             match = re.search(r'\[(0x.*)]', line)
             if match:
-                print "%s %s" % (line.ljust(longest),
-                                 addr2line(binary, match.group(1)))
+                print("%s %s" % (line.ljust(longest),
+                                 addr2line(binary, match.group(1))))
             else:
-                print line
-        print
+                print(line)
+        print()
 
 
 if __name__ == "__main__":
diff --git a/utilities/ovs-pcap.in b/utilities/ovs-pcap.in
index dddbee4df..6b5f63399 100755
--- a/utilities/ovs-pcap.in
+++ b/utilities/ovs-pcap.in
@@ -14,8 +14,6 @@ 
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import print_function
-
 import binascii
 import getopt
 import struct
@@ -79,7 +77,7 @@  if __name__ == "__main__":
         try:
             options, args = getopt.gnu_getopt(sys.argv[1:], 'hV',
                                               ['help', 'version'])
-        except getopt.GetoptException as geo:
+        except getopt.GetoptError as geo:
             sys.stderr.write("%s: %s\n" % (argv0, geo.msg))
             sys.exit(1)
 
diff --git a/utilities/ovs-vlan-test.in b/utilities/ovs-vlan-test.in
index 154573a9b..de3ae1686 100755
--- a/utilities/ovs-vlan-test.in
+++ b/utilities/ovs-vlan-test.in
@@ -14,9 +14,9 @@ 
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import BaseHTTPServer
 import getopt
-import httplib
+import http.client
+import http.server
 import os
 import threading
 import time
@@ -84,7 +84,7 @@  class UDPReceiver:
 
         try:
             sock.bind((self.vlan_ip, self.vlan_port))
-        except socket.error, e:
+        except socket.error as e:
             print_safe('Failed to bind to %s:%d with error: %s'
                     % (self.vlan_ip, self.vlan_port, e))
             os._exit(1) #sys.exit only exits the current thread.
@@ -95,7 +95,7 @@  class UDPReceiver:
                 data, _ = sock.recvfrom(4096)
             except socket.timeout:
                 continue
-            except socket.error, e:
+            except socket.error as e:
                 print_safe('Failed to receive from %s:%d with error: %s'
                     % (self.vlan_ip, self.vlan_port, e))
                 os._exit(1)
@@ -180,7 +180,7 @@  class VlanServer:
             for _ in range(send_time * 2):
                 try:
                     send_packet(test_id, size, ip, port)
-                except socket.error, e:
+                except socket.error as e:
                     self.set_result(test_id, 'Failure: ' + str(e))
                     return
                 time.sleep(.5)
@@ -194,15 +194,15 @@  class VlanServer:
     def run(self):
         self.udp_recv.start()
         try:
-            BaseHTTPServer.HTTPServer((self.server_ip, self.server_port),
+            http.server.HTTPServer((self.server_ip, self.server_port),
                     VlanServerHandler).serve_forever()
-        except socket.error, e:
+        except socket.error as e:
             print_safe('Failed to start control server: %s' % e)
             self.udp_recv.stop()
 
         return 1
 
-class VlanServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+class VlanServerHandler(http.server.BaseHTTPRequestHandler):
     def do_GET(self):
 
         #Guarantee three arguments.
@@ -244,7 +244,7 @@  class VlanClient:
         self.udp_recv       = UDPReceiver(vlan_ip, vlan_port)
 
     def request(self, resource):
-        conn = httplib.HTTPConnection(self.server_ip_port)
+        conn = http.client.HTTPConnection(self.server_ip_port)
         conn.request('GET', resource)
         return conn
 
@@ -256,7 +256,7 @@  class VlanClient:
         try:
             conn = self.request('/start/recv')
             data = conn.getresponse().read()
-        except (socket.error, httplib.HTTPException), e:
+        except (socket.error, http.client.HTTPException) as e:
             error_msg(e)
             return False
 
@@ -277,7 +277,7 @@  class VlanClient:
                 send_packet(test_id, size, ip, port)
                 resp = self.request('/result/%d' % test_id).getresponse()
                 data = resp.read()
-            except (socket.error, httplib.HTTPException), e:
+            except (socket.error, http.client.HTTPException) as e:
                 error_msg(e)
                 return False
 
@@ -302,7 +302,7 @@  class VlanClient:
         try:
             conn    = self.request(resource)
             test_id = conn.getresponse().read()
-        except (socket.error, httplib.HTTPException), e:
+        except (socket.error, http.client.HTTPException) as e:
             error_msg(e)
             return False
 
@@ -335,7 +335,7 @@  class VlanClient:
         try:
             resp = self.request('/ping').getresponse()
             data = resp.read()
-        except (socket.error, httplib.HTTPException), e:
+        except (socket.error, http.client.HTTPException) as e:
             error_msg(e)
             return False
 
@@ -383,7 +383,7 @@  def main():
     try:
         options, args = getopt.gnu_getopt(sys.argv[1:], 'hVs',
                                           ['help', 'version', 'server'])
-    except getopt.GetoptError, geo:
+    except getopt.GetoptError as geo:
         print_safe('%s: %s\n' % (sys.argv[0], geo.msg))
         return 1