diff --git a/Lib/netrc.py b/Lib/netrc.py
index 754828c..90255df8 100644
--- a/Lib/netrc.py
+++ b/Lib/netrc.py
@@ -26,9 +26,12 @@
                 file = os.path.join(os.environ['HOME'], ".netrc")
             except KeyError:
                 raise IOError("Could not find .netrc: $HOME is not set")
-        fp = open(file)
         self.hosts = {}
         self.macros = {}
+        with open(file) as fp:
+            self._parse(file, fp)
+
+    def _parse(self, file, fp):
         lexer = shlex.shlex(fp)
         lexer.wordchars += r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
         while 1:
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 6b9bb6b..6eb9385 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -809,6 +809,8 @@
 
             if self.stdin:
                 if input is not None:
+                    if isinstance(input, str):
+                        input = input.encode()
                     self.stdin.write(input)
                 self.stdin.close()
 
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 91728ef..d126854 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -885,6 +885,7 @@
         test_pwd
         test_resource
         test_signal
+        test_syslog
         test_threadsignals
         test_wait3
         test_wait4
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index 0d22164..4345be7 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -58,6 +58,7 @@
         self._box = self._factory(self._path)
 
     def tearDown(self):
+        self._box.close()
         self._delete_recursively(self._path)
 
     def test_add(self):
@@ -390,12 +391,14 @@
         self._box.add(contents[0])
         self._box.add(contents[1])
         self._box.add(contents[2])
+        oldbox = self._box
         method()
         self._box = self._factory(self._path)
         keys = self._box.keys()
         self.assertEqual(len(keys), 3)
         for key in keys:
             self.assert_(self._box.get_string(key) in contents)
+        oldbox.close()
 
     def test_dump_message(self):
         # Write message representations to disk
@@ -403,7 +406,7 @@
                       _sample_message, io.StringIO(_sample_message)):
             output = io.StringIO()
             self._box._dump_message(input, output)
-            self.assert_(output.getvalue() ==
+            self.assertEqual(output.getvalue(),
                          _sample_message.replace('\n', os.linesep))
         output = io.StringIO()
         self.assertRaises(TypeError,
@@ -694,6 +697,7 @@
 class _TestMboxMMDF(TestMailbox):
 
     def tearDown(self):
+        self._box.close()
         self._delete_recursively(self._path)
         for lock_remnant in glob.glob(self._path + '.*'):
             test_support.unlink(lock_remnant)
@@ -916,6 +920,7 @@
     _factory = lambda self, path, factory=None: mailbox.Babyl(path, factory)
 
     def tearDown(self):
+        self._box.close()
         self._delete_recursively(self._path)
         for lock_remnant in glob.glob(self._path + '.*'):
             test_support.unlink(lock_remnant)
diff --git a/Lib/test/test_netrc.py b/Lib/test/test_netrc.py
index b536255..4a2cb0d 100644
--- a/Lib/test/test_netrc.py
+++ b/Lib/test/test_netrc.py
@@ -21,25 +21,24 @@
 
 class NetrcTestCase(unittest.TestCase):
 
-    def setUp (self):
+    def setUp(self):
         mode = 'w'
         if sys.platform not in ['cygwin']:
             mode += 't'
         fp = open(temp_filename, mode)
         fp.write(TEST_NETRC)
         fp.close()
-        self.netrc = netrc.netrc(temp_filename)
 
-    def tearDown (self):
-        del self.netrc
+    def tearDown(self):
         os.unlink(temp_filename)
 
     def test_case_1(self):
-        self.assert_(self.netrc.macros == {'macro1':['line1\n', 'line2\n'],
+        nrc = netrc.netrc(temp_filename)
+        self.assert_(nrc.macros == {'macro1':['line1\n', 'line2\n'],
                                            'macro2':['line3\n', 'line4\n']}
                                            )
-        self.assert_(self.netrc.hosts['foo'] == ('log1', 'acct1', 'pass1'))
-        self.assert_(self.netrc.hosts['default'] == ('log2', None, 'pass2'))
+        self.assert_(nrc.hosts['foo'] == ('log1', 'acct1', 'pass1'))
+        self.assert_(nrc.hosts['default'] == ('log2', None, 'pass2'))
 
 def test_main():
     test_support.run_unittest(NetrcTestCase)
diff --git a/Lib/test/test_pep277.py b/Lib/test/test_pep277.py
index 794de0d..554e011 100644
--- a/Lib/test/test_pep277.py
+++ b/Lib/test/test_pep277.py
@@ -36,7 +36,7 @@
         except OSError:
             pass
         for name in self.files:
-            f = open(name, 'w')
+            f = open(name, 'wb')
             f.write((name+'\n').encode("utf-8"))
             f.close()
             os.stat(name)
@@ -71,7 +71,7 @@
 
     def test_open(self):
         for name in self.files:
-            f = open(name, 'w')
+            f = open(name, 'wb')
             f.write((name+'\n').encode("utf-8"))
             f.close()
             os.stat(name)
@@ -80,7 +80,7 @@
         f1 = os.listdir(test_support.TESTFN)
         # Printing f1 is not appropriate, as specific filenames
         # returned depend on the local encoding
-        f2 = os.listdir(str(test_support.TESTFN,
+        f2 = os.listdir(str(test_support.TESTFN.encode("utf-8"),
                                 sys.getfilesystemencoding()))
         f2.sort()
         print(f2)
@@ -96,7 +96,7 @@
         oldwd = os.getcwd()
         os.mkdir(dirname)
         os.chdir(dirname)
-        f = open(filename, 'w')
+        f = open(filename, 'wb')
         f.write((filename + '\n').encode("utf-8"))
         f.close()
         print(repr(filename))
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index fea98dc..39a889d 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -630,7 +630,7 @@
             p = subprocess.Popen(["set"], shell=1,
                                  stdout=subprocess.PIPE,
                                  env=newenv)
-            self.assertNotEqual(p.stdout.read().find("physalis"), -1)
+            self.assertNotEqual(p.stdout.read().find(b"physalis"), -1)
 
         def test_shell_string(self):
             # Run command through the shell (string)
@@ -639,7 +639,7 @@
             p = subprocess.Popen("set", shell=1,
                                  stdout=subprocess.PIPE,
                                  env=newenv)
-            self.assertNotEqual(p.stdout.read().find("physalis"), -1)
+            self.assertNotEqual(p.stdout.read().find(b"physalis"), -1)
 
         def test_call_string(self):
             # call() function with string argument on Windows
