diff --git a/cmds/Makefile b/cmds/Makefile
index 45580b2..4bcca65 100644
--- a/cmds/Makefile
+++ b/cmds/Makefile
@@ -3,6 +3,13 @@
 PREFIX=/
 BINDIR=$(DESTDIR)$(PREFIX)/bin
 LIBDIR=$(DESTDIR)$(PREFIX)/lib
+GPYLINT=$(shell \
+    if which gpylint >/dev/null; then \
+      echo gpylint; \
+    else \
+      echo 'echo "(gpylint-missing)" >&2'; \
+    fi \
+)
 
 PORTABLE_TARGETS=\
 	balloon \
@@ -291,9 +298,15 @@
 		./$$d; \
 	done
 
-test: all $(TESTS)
+lint: $(filter-out options.py,$(wildcard *.py))
+	$(GPYLINT) $^
+
+test_only: all
 	./wvtest/wvtestrun $(MAKE) runtests
 
+test: all $(TESTS)
+	$(MAKE) test_only lint
+
 clean:
 	rm -f *.o $(TARGETS) \
 		$(HOST_TARGETS) \
diff --git a/cmds/bsa2bluez.py b/cmds/bsa2bluez.py
index 159c1b4..d3db9cf 100755
--- a/cmds/bsa2bluez.py
+++ b/cmds/bsa2bluez.py
@@ -1,8 +1,11 @@
 #!/usr/bin/python
+"""bsa2bluez: Automatic device import from Broadcom BSA to BlueZ."""
 
 import os
+import sys
 import xml.etree.ElementTree as ET
 
+
 def create_device_info_file(filename, link_key):
   with open(filename, 'w') as f:
     f.write('\n')
@@ -16,6 +19,7 @@
     f.write('SupportedTechnologies=BR/EDR;\n')
     f.write('Trusted=true\n')
     f.write('Blocked=false\n')
+    # pylint: disable=line-too-long
     f.write('Services=00001000-0000-1000-8000-00805f9b34fb;00001124-0000-1000-8000-00805f9b34fb;00001200-0000-1000-8000-00805f9b34fb;\n')
     f.write('Class=0x00050c\n')
     f.write('\n')
@@ -25,6 +29,7 @@
     f.write('Product=8192\n')
     f.write('Version=283\n')
 
+
 def create_device_cache_file(filename):
   with open(filename, 'w') as f:
     f.write('\n')
@@ -32,47 +37,45 @@
     f.write('Name=GFRM100\n')
     f.write('\n')
     f.write('[ServiceRecords]\n')
+    # pylint: disable=line-too-long
     f.write('0x00000000=35920900000A000000000900013503191000090004350D350619010009000135031900010900053503191002090006350909656E09006A09010009000935083506190100090100090100252D42726F6164636F6D20426C7565746F6F746820576972656C6573732052656D6F74652053445020536572766572090101250E52656D6F746520436F6E74726F6C0902003503090100\n')
     f.write('0x00010000=3601B60900000A000100000900013503191124090004350D350619010009001135031900110900053503191002090006350909656E09006A0901000900093508350619112409010009000D350F350D350619010009001335031900110901002517476F6F676C6554562052656D6F746520436F6E74726F6C09010125214D756C74692D66756E6374696F6E2072656D6F74652077697468206B65797061640901022506476F6F676C6509020009017109020109011109020208400902030821090204280109020528010902063600BB3600B808222600B305010906A10185417508950126FF00050719002AFF008100C0050C0901A101854019002AFF0375109501150026FF038100C005010980A10185121981299315812593750895018140C0050C0901A1018513092015002564750895018142C08521092175089501150026FF008102852205010922A102093B950175101500264F01810206F0FF09227510964F01150026FF00820102C085F2090275089501150026FF00910285F3090375089510150026FF0081020902073508350609040909010009020B09010009020C090C8009020D280009020E280109020F090318090210090000\n')
     f.write('0x00010001=35520900000A000100010900013503191200090004350D350619010009000135031900010900093508350619120009010009020009010009020109005809020209200009020309011B0902042801090205090001\n')
 
-def main():
-  BT_MAC_FILE='/tmp/btmacaddress'
-  BSA_DEVICES_FILE='/user/bsa/bt_devices.xml'
-  BLUEZ_STORAGE_DIR='/user/bluez/lib/bluetooth'
 
+BT_MAC_FILE = '/tmp/btmacaddress'
+BSA_DEVICES_FILE = '/user/bsa/bt_devices.xml'
+BLUEZ_STORAGE_DIR = '/user/bluez/lib/bluetooth'
+
+
+def main():
   if not os.path.exists(BT_MAC_FILE):
-    print 'error: %s does not exist' % BT_MAC_FILE
-    return
+    sys.exit('error: %s does not exist' % BT_MAC_FILE)
 
   with open(BT_MAC_FILE, 'r') as f:
     bt_mac = f.read().upper().rstrip('\n')
 
   if len(bt_mac) != 17:
-    print 'error: bt_mac %s is invalid' % bt_mac
-    return
-
-  if not os.path.exists(BSA_DEVICES_FILE):
-    print 'error: %s does not exist' % BSA_DEVICES_FILE
-    return
+    sys.exit('error: bt_mac %s is invalid' % bt_mac)
 
   try:
     bsa_devices = ET.parse(BSA_DEVICES_FILE)
-  except:
-    print 'error: %s cannot be parsed' % BSA_DEVICES_FILE
+  except ET.ParseError as e:
+    print >>sys.stderr, 'error: failed to parse %r with exception %r' % (
+        BSA_DEVICES_FILE, e)
     with open(BSA_DEVICES_FILE, 'r') as f:
-      buffer = f.read()
-    print buffer[0:4096]
-    return
+      buf = f.read()
+    print >>sys.stderr, buf[0:4096]
+    sys.exit(1)
 
   adapter_dir = BLUEZ_STORAGE_DIR + '/' + bt_mac
   if not os.path.isdir(adapter_dir):
-    print 'create: BlueZ adapter dir %s' % adapter_dir
+    print >>sys.stderr, 'create: BlueZ adapter dir %s' % adapter_dir
     os.makedirs(adapter_dir)
 
   device_cache_dir = adapter_dir + '/cache'
   if not os.path.isdir(device_cache_dir):
-    print 'create: BlueZ device cache dir %s' % device_cache_dir
+    print >>sys.stderr, 'create: BlueZ device cache dir %s' % device_cache_dir
     os.makedirs(device_cache_dir)
 
   for parent in bsa_devices.getiterator():
@@ -90,36 +93,40 @@
 
     bd_addr = bd_addr.upper()
     if len(bd_addr) != 17:
-      print 'BSA device: GFRM100 has invalid bd_addr %s' % bd_addr
+      print >>sys.stderr, 'BSA device: GFRM100 has invalid bd_addr %s' % bd_addr
       continue
 
     link_key = link_key.upper().replace(':', '')
     if len(link_key) != 32:
-      print 'BSA device: GFRM100 has invalid link_key %s' % link_key
+      print >>sys.stderr, ('BSA device: GFRM100 has invalid link_key %s'
+                           % link_key)
       continue
 
-    print 'BSA device: GFRM100 at bd_addr %s link_key %s' % (bd_addr, link_key)
+    print >>sys.stderr, ('BSA device: GFRM100 at bd_addr %s link_key %s'
+                         % (bd_addr, link_key))
 
     device_dir = adapter_dir + '/' + bd_addr
     if not os.path.isdir(device_dir):
-      print 'create: BlueZ device dir %s' % device_dir
+      print >>sys.stderr, 'create: BlueZ device dir %s' % device_dir
       os.makedirs(device_dir)
     else:
-      print 'exists: BlueZ device dir %s' % device_dir
+      print >>sys.stderr, 'exists: BlueZ device dir %s' % device_dir
 
     device_info_file = device_dir + '/info'
     if not os.path.exists(device_info_file):
-      print 'create: BlueZ device info file %s' % device_info_file
+      print >>sys.stderr, 'create: BlueZ device info file %s' % device_info_file
       create_device_info_file(device_info_file, link_key)
     else:
-      print 'exists: BlueZ device info file %s' % device_info_file
+      print >>sys.stderr, 'exists: BlueZ device info file %s' % device_info_file
 
     device_cache_file = device_cache_dir + '/' + bd_addr
     if not os.path.exists(device_cache_file):
-      print 'create: BlueZ device cache file %s' % device_cache_file
+      print >>sys.stderr, ('create: BlueZ device cache file %s'
+                           % device_cache_file)
       create_device_cache_file(device_cache_file)
     else:
-      print 'exists: BlueZ device cache file %s' % device_cache_file
+      print >>sys.stderr, ('exists: BlueZ device cache file %s'
+                           % device_cache_file)
 
 if __name__ == '__main__':
   main()
diff --git a/cmds/burnin-flash.py b/cmds/burnin-flash.py
index d00c719..80dbfcd 100755
--- a/cmds/burnin-flash.py
+++ b/cmds/burnin-flash.py
@@ -5,8 +5,6 @@
 
 __author__ = 'dgentry@google.com (Denton Gentry)'
 
-import ctypes
-import fcntl
 import os
 import os.path
 import subprocess
@@ -17,7 +15,7 @@
 
 
 try:
-  import monotime  # pylint: disable-msg=unused-import,g-import-not-at-top
+  import monotime  # pylint: disable=unused-import,g-import-not-at-top
 except ImportError:
   pass
 try:
@@ -26,7 +24,6 @@
   gettime = time.time
 
 
-
 optspec = """
 burnin-flash [options...] /path/to/write/to
 --
@@ -38,7 +35,7 @@
 
 def main():
   o = options.Options(optspec)
-  (opt, flags, extra) = o.parse(sys.argv[1:])  #pylint: disable-msg=W0612
+  (opt, flags, extra) = o.parse(sys.argv[1:])  # pylint: disable=W0612
   if not opt.mtd:
     o.fatal('an mtd argument is required')
   if len(extra) != 1:
@@ -95,7 +92,7 @@
 
     ecc = py_mtd.eccstats(opt.mtd)
     # Ignore ecc.corrected, they are uncommon but normal.
-    print('%s: Corrected ECC error = %d' % (opt.mtd, ecc.corrected))
+    print '%s: Corrected ECC error = %d' % (opt.mtd, ecc.corrected)
     if ecc.failed != start_ecc.failed:
       print('%s: Uncorrectable ECC error during test, %d != %d' %
             (opt.mtd, ecc.failed, start_ecc.failed))
diff --git a/cmds/dialcheck-test-server.py b/cmds/dialcheck-test-server.py
index 2637384..6f360a1 100644
--- a/cmds/dialcheck-test-server.py
+++ b/cmds/dialcheck-test-server.py
@@ -1,14 +1,11 @@
 #!/usr/bin/python
-"""Fake SSDP server for unit tests.
-
-"""
+"""Fake SSDP server for unit tests."""
 
 import errno
 import os
 import signal
 import socket
 import SocketServer
-import struct
 import sys
 
 
@@ -21,6 +18,7 @@
 
 
 class SSDPHandler(SocketServer.BaseRequestHandler):
+
   def handle(self):
     self.request[1].sendto(notify, self.client_address)
 
@@ -49,10 +47,11 @@
   SocketServer.UDPServer.allow_reuse_address = True
   s = SocketServer.UDPServer(('', 0), SSDPHandler)
   s.socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP,
-      socket.inet_aton('239.255.255.250') + socket.inet_aton('0.0.0.0'))
+                      socket.inet_pton(socket.AF_INET, '239.255.255.250') +
+                      socket.inet_pton(socket.AF_INET, '0.0.0.0'))
   sn = s.socket.getsockname()
   port = sn[1]
-  open(sys.argv[1], "w").write(str(port))
+  open(sys.argv[1], 'w').write(str(port))
   s.handle_request()
 
 
diff --git a/cmds/readubootver.py b/cmds/readubootver.py
index 76651be..28cc3cf 100755
--- a/cmds/readubootver.py
+++ b/cmds/readubootver.py
@@ -1,4 +1,5 @@
 #!/usr/bin/python
+"""readubootver: read U-Boot version."""
 
 import struct
 import sys
@@ -19,6 +20,7 @@
 
 
 def GetRootPartition():
+  """Identify the root partition from the kernel command line."""
   cmdline = ReadFile(CMDLINE_FILE)
   for opt in cmdline.split():
     if opt.startswith('root='):
@@ -27,12 +29,13 @@
         return 'kernel0'
       if rootfs == 'rootfs1':
         return 'kernel1'
-      print 'Unknown rootfs=' + rootfs0
+      print 'Unknown rootfs=' + rootfs
       sys.exit(1)
   return None
 
 
 def GetBootMtds():
+  """Get /dev file names for bootable MTDs."""
   all_mtds = ReadFile(MTD_FILE)
   boot_mtds = dict()
   for line in all_mtds.split('\n'):
@@ -46,6 +49,7 @@
 
 
 def ReadUbootHeader(device):
+  """Read U-Boot header from a /dev/mtd* device file."""
   try:
     with open(device, 'rb') as f:
       chunk = f.read(7*4 + 4 + 32)
@@ -86,8 +90,8 @@
     else:
       print 'ALTERNATE'
     print 'mtd: %s' % mtd
-    print 'size: %d' % header["size"]
-    print 'name: %s' % header["name"]
+    print 'size: %d' % header['size']
+    print 'name: %s' % header['name']
     print ''
 
 if __name__ == '__main__':
diff --git a/cmds/readubootver_test.py b/cmds/readubootver_test.py
index 5b13be1..e810049 100755
--- a/cmds/readubootver_test.py
+++ b/cmds/readubootver_test.py
@@ -8,12 +8,13 @@
 
 import readubootver
 
+
 class ReadUbootVerTest(unittest.TestCase):
 
   def setUp(self):
     self.tmp_dir = tempfile.mkdtemp()
-    self.save_MTD_FILE = readubootver.MTD_FILE
-    self.save_CMDLINE_FILE = readubootver.CMDLINE_FILE
+    self.save_mtd_file = readubootver.MTD_FILE
+    self.save_cmdline_file = readubootver.CMDLINE_FILE
     readubootver.MTD_FILE = tempfile.mktemp(prefix=self.tmp_dir)
     readubootver.CMDLINE_FILE = tempfile.mktemp(prefix=self.tmp_dir)
 
@@ -24,14 +25,14 @@
       shutil.rmtree(self.tmp_dir)
     except OSError:
       pass
-    readubootver.MTD_FILE = self.save_MTD_FILE
-    readubootver.CMDLINE_FILE = self.save_CMDLINE_FILE
+    readubootver.MTD_FILE = self.save_mtd_file
+    readubootver.CMDLINE_FILE = self.save_cmdline_file
 
   def testGetRootPartition(self):
     with open(readubootver.CMDLINE_FILE, 'w') as f:
-      f.write('ttyS0,115200 mtdparts=spi_flash:768k(loader),256k(env),' +
-              '128k(var1),128k(var2),128k(sysvar1),128k(sysvar2),' +
-              '14m(kernel0),14m(kernel1),-(user_data) debug=1 root=rootfs0 ' +
+      f.write('ttyS0,115200 mtdparts=spi_flash:768k(loader),256k(env),'
+              '128k(var1),128k(var2),128k(sysvar1),128k(sysvar2),'
+              '14m(kernel0),14m(kernel1),-(user_data) debug=1 root=rootfs0 '
               'console=ttyS0,115200 log_buf_len=1048576')
     part = readubootver.GetRootPartition()
     self.assertEqual('kernel0', part)
@@ -46,18 +47,17 @@
     part = readubootver.GetRootPartition()
     self.assertEqual('kernel0', part)
 
-
   def testGetBootMtds(self):
     with open(readubootver.MTD_FILE, 'w') as f:
-      f.write('dev:    size   erasesize  name\n' +
-              'mtd0: 000c0000 00010000 "loader"\n' +
-              'mtd1: 00040000 00010000 "env"\n' +
-              'mtd2: 00020000 00010000 "var1"\n' +
-              'mtd3: 00020000 00010000 "var2"\n' +
-              'mtd4: 00020000 00010000 "sysvar1"\n' +
-              'mtd5: 00020000 00010000 "sysvar2"\n' +
-              'mtd6: 00e00000 00010000 "kernel0"\n' +
-              'mtd7: 00e00000 00010000 "kernel1"\n' +
+      f.write('dev:    size   erasesize  name\n'
+              'mtd0: 000c0000 00010000 "loader"\n'
+              'mtd1: 00040000 00010000 "env"\n'
+              'mtd2: 00020000 00010000 "var1"\n'
+              'mtd3: 00020000 00010000 "var2"\n'
+              'mtd4: 00020000 00010000 "sysvar1"\n'
+              'mtd5: 00020000 00010000 "sysvar2"\n'
+              'mtd6: 00e00000 00010000 "kernel0"\n'
+              'mtd7: 00e00000 00010000 "kernel1"\n'
               'mtd8: 00280000 00010000 "user_data"\n')
     mtds = readubootver.GetBootMtds()
     self.assertEqual(2, len(mtds))
@@ -67,20 +67,19 @@
     self.assertEqual('mtd7', mtds['kernel1'])
 
     with open(readubootver.MTD_FILE, 'w') as f:
-      f.write('dev:    size   erasesize  name\n' +
-              'mtd0: 000c0000 00010000 "loader"\n' +
-              'mtd1: 00040000 00010000 "env"\n' +
-              'mtd2: 00020000 00010000 "var1"\n' +
-              'mtd3: 00020000 00010000 "var2"\n' +
-              'mtd4: 00020000 00010000 "sysvar1"\n' +
-              'mtd5: 00020000 00010000 "sysvar2"\n' +
+      f.write('dev:    size   erasesize  name\n'
+              'mtd0: 000c0000 00010000 "loader"\n'
+              'mtd1: 00040000 00010000 "env"\n'
+              'mtd2: 00020000 00010000 "var1"\n'
+              'mtd3: 00020000 00010000 "var2"\n'
+              'mtd4: 00020000 00010000 "sysvar1"\n'
+              'mtd5: 00020000 00010000 "sysvar2"\n'
               'mtd166: 00e00000 00010000 "kernel0"\n')
     mtds = readubootver.GetBootMtds()
     self.assertEqual(1, len(mtds))
     self.assertTrue('kernel0' in mtds)
     self.assertEqual('mtd166', mtds['kernel0'])
 
-
   def testReadUbootHeader(self):
     data = (0x27051956, 0xdeadf00d, 0x123, 0x1234, 10, 10, 0xf00d,
             0, 0, 0, 0, 'version123')
diff --git a/cmds/soft_rc.py b/cmds/soft_rc.py
index 685a069..37e628d 100755
--- a/cmds/soft_rc.py
+++ b/cmds/soft_rc.py
@@ -412,6 +412,16 @@
         raise
 
   def SendKeyCode(self, token, keycode):
+    """Send key codes to the device.
+
+    If self.autorelease is True, automatically generate a key-up event a short
+    time after each key-down event is sent.
+
+    Args:
+      token: a token for a single key event from the program's input.
+      keycode: the keycode corresponding to this token.
+    """
+
     self.Log(LOG_VERB, "Enter: %r -> 0x%x" % (token, keycode))
     self.WriteKeyCodeToDevice(keycode)
 
diff --git a/cmds/ssdptax-test-server.py b/cmds/ssdptax-test-server.py
index c86283a..de745cb 100644
--- a/cmds/ssdptax-test-server.py
+++ b/cmds/ssdptax-test-server.py
@@ -1,7 +1,5 @@
 #!/usr/bin/python
-"""Fake minissdpd for unit tests.
-
-"""
+"""Fake minissdpd for unit tests."""
 
 import BaseHTTPServer
 import socket
@@ -51,11 +49,11 @@
 
 
 class HttpHandler(BaseHTTPServer.BaseHTTPRequestHandler):
-  """Respond to an HHTP GET for SSDP DeviceInfo."""
 
-  def do_GET(self):
+  def do_GET(self):  # pylint: disable=invalid-name
+    """Respond to an HTTP GET for SSDP DeviceInfo."""
     self.send_response(200)
-    self.send_header('Content-type','text/xml')
+    self.send_header('Content-type', 'text/xml')
     self.end_headers()
     if self.path.endswith('text_device_xml'):
       self.wfile.write(text_device_xml)
@@ -67,7 +65,8 @@
       self.wfile.write(ssdp_device_xml)
 
 
-class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
+class ThreadingHTTPServer(SocketServer.ThreadingMixIn,
+                          BaseHTTPServer.HTTPServer):
   pass
 
 
@@ -85,6 +84,7 @@
 
 
 class UdpHandler(SocketServer.DatagramRequestHandler):
+
   def handle(self):
     self.request[1].sendto(bytearray(notify_text[0]), self.client_address)
 
@@ -105,7 +105,7 @@
   if testnum == 4:
     pathend = 'ssdp_device_xml'
 
-  h = ThreadingHTTPServer(("", 0), HttpHandler)
+  h = ThreadingHTTPServer(('', 0), HttpHandler)
   sn = h.socket.getsockname()
   port = sn[1]
   url = 'http://127.0.0.1:%d/%s' % (port, pathend)
@@ -126,7 +126,8 @@
 
   d = ThreadingUdpServer(('', 1900), UdpHandler)
   d.socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP,
-      socket.inet_aton('239.255.255.250') + socket.inet_aton('0.0.0.0'))
+                      socket.inet_pton(socket.AF_INET, '239.255.255.250') +
+                      socket.inet_pton(socket.AF_INET, '0.0.0.0'))
   d_thread = threading.Thread(target=d.serve_forever)
   d_thread.daemon = True
   d_thread.start()
diff --git a/cmds/stun.py b/cmds/stun.py
index 5b162ef..94b45a3 100755
--- a/cmds/stun.py
+++ b/cmds/stun.py
@@ -99,7 +99,7 @@
 
 
 try:
-  import monotime  # pylint: disable-msg=unused-import,g-import-not-at-top
+  import monotime  # pylint: disable=unused-import,g-import-not-at-top
 except ImportError:
   pass
 try:
@@ -130,9 +130,9 @@
   family, port = struct.unpack('!HH', value[:4])
   addr = value[4:]
   if family == 0x01:  # IPv4
-    return socket.inet_ntoa(addr), port
+    return socket.inet_ntop(socket.AF_INET, addr), port
   elif family == 0x02:  # IPv6
-    return socket.inet_ntop(socket.AF_INET6), port
+    return socket.inet_ntop(socket.AF_INET6, addr), port
   else:
     raise ValueError('invalid family %d: expected 1=IPv4 or 2=IPv6' % family)
 
@@ -166,6 +166,7 @@
 
 
 def _Encode(msgtype, transaction_id, *attrs):
+  """Encode message type, transaction id, and attrs into a STUN message."""
   transaction_id = str(transaction_id)
   if len(transaction_id) != 12:
     raise ValueError('transactionid %r must be exactly 12 bytes'
@@ -179,6 +180,7 @@
 
 
 def _Decode(text):
+  """Decode a STUN message into message type, transaction id, and attrs."""
   if len(text) < 20:
     raise ParseError('packet length %d must be >= 20' % len(text))
   msgtype, length, cookie = struct.unpack('!HHI', text[:8])
diff --git a/cmds/test-logos.py b/cmds/test-logos.py
index 34f5693..186ea24 100755
--- a/cmds/test-logos.py
+++ b/cmds/test-logos.py
@@ -2,17 +2,23 @@
 
 """Tests for the logos program."""
 
-import random
+import os
 import select
 import signal
 import socket
 import subprocess
-import time
-from wvtest.wvtest import *
+
+from wvtest.wvtest import WVFAIL
+from wvtest.wvtest import WVPASS
+from wvtest.wvtest import WVPASSEQ
+from wvtest.wvtest import WVPASSLT
+from wvtest.wvtest import wvtest
+from wvtest.wvtest import wvtest_main
 
 
 @wvtest
-def testLogos():
+def TestLogos():
+  """spin up and test a logos server."""
   # We use a SOCK_DGRAM here rather than a normal pipe, because datagram
   # sockets are guaranteed never to merge consecutive writes into a single
   # packet.  That way we can validate the correct merging of write() calls
@@ -30,7 +36,7 @@
   fd2 = sock2.fileno()
 
   def _Read():
-    r, w, x = select.select([fd2, pipe1], [], [], 30)
+    r, unused_w, unused_x = select.select([fd2, pipe1], [], [], 30)
     if pipe1 in r:
       WVFAIL('subprocess died unexpectedly')
       raise Exception('subprocess died unexpectedly with code %d' % p.wait())
@@ -42,7 +48,7 @@
   os.write(fd1, 'a\nErROR: b\nw: c')
   WVPASSEQ('<7>fac: a\n', _Read())
   WVPASSEQ('<3>fac: ErROR: b\n', _Read())
-  r, w, x = select.select([fd2], [], [], 0)
+  r, unused_w, unused_x = select.select([fd2], [], [], 0)
   WVFAIL(r)
   os.write(fd1, '\n\n')
   WVPASSEQ('<4>fac: w: c\n', _Read())
@@ -54,13 +60,13 @@
   WVPASSEQ('<7>fac: abba    bbb\n', _Read())
   WVPASSEQ('<7>fac: aa              b       c\n', _Read())
   os.write(fd1, ''.join(chr(i) for i in range(33)) + '\n')
-  WVPASSEQ(r'<7>fac: ' +
+  WVPASSEQ(r'<7>fac: '
            r'\x00\x01\x02\x03\x04\x05\x06\x07\x08    '
-           + '\n', _Read())
-  WVPASSEQ(r'<7>fac: ' +
-           r'\x0b\x0c\x0e\x0f' +
-           r'\x10\x11\x12\x13\x14\x15\x16\x17' +
-           r'\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f ' +
+           '\n', _Read())
+  WVPASSEQ(r'<7>fac: '
+           r'\x0b\x0c\x0e\x0f'
+           r'\x10\x11\x12\x13\x14\x15\x16\x17'
+           r'\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f '
            '\n', _Read())
 
   # very long lines should be broken, but not missing any characters
@@ -81,7 +87,7 @@
   result = _Read()
   print '%r' % result
   WVPASS(result.startswith('<4>fac: W: '))
-  r, w, x = select.select([fd2], [], [], 0)
+  r, unused_w, unused_x = select.select([fd2], [], [], 0)
   WVFAIL(r)
   os.write(fd1, '\n')
   WVPASSEQ('<7>fac: booga!\n', _Read())
@@ -94,9 +100,8 @@
     print repr(result)
   print 'got: %r' % result
   WVPASS('rate limiting started')
-  while 1:
-    # drain the input until it's idle
-    r, w, x = select.select([fd1], [], [], 0.1)
+  while 1:  # drain the input until it's idle
+    r, unused_w, unused_x = select.select([fd1], [], [], 0.1)
     if not r:
       break
 
