changeset: 71165:e240af1f0ae1 parent: 71163:c039c6b58907 parent: 71164:cd1759711357 user: Victor Stinner date: Mon Jul 04 01:47:40 2011 +0200 files: Lib/runpy.py Lib/test/test_runpy.py Misc/NEWS description: (merge 3.2) Issue #12451: runpy: run_path() now opens the Python script in binary mode, instead of text mode using the locale encoding, to support other encodings than UTF-8 (scripts using the coding cookie). diff -r c039c6b58907 -r e240af1f0ae1 Lib/runpy.py --- a/Lib/runpy.py Mon Jul 04 01:27:37 2011 +0200 +++ b/Lib/runpy.py Mon Jul 04 01:47:40 2011 +0200 @@ -226,7 +226,7 @@ code = read_code(f) if code is None: # That didn't work, so try it as normal source code - with open(fname, "r") as f: + with open(fname, "rb") as f: code = compile(f.read(), fname, 'exec') return code diff -r c039c6b58907 -r e240af1f0ae1 Lib/test/test_runpy.py --- a/Lib/test/test_runpy.py Mon Jul 04 01:27:37 2011 +0200 +++ b/Lib/test/test_runpy.py Mon Jul 04 01:47:40 2011 +0200 @@ -405,6 +405,16 @@ msg = "recursion depth exceeded" self.assertRaisesRegex(RuntimeError, msg, run_path, zip_name) + def test_encoding(self): + with temp_dir() as script_dir: + filename = os.path.join(script_dir, 'script.py') + with open(filename, 'w', encoding='latin1') as f: + f.write(""" +#coding:latin1 +"non-ASCII: h\xe9" +""") + result = run_path(filename) + self.assertEqual(result['__doc__'], "non-ASCII: h\xe9") def test_main(): diff -r c039c6b58907 -r e240af1f0ae1 Misc/NEWS --- a/Misc/NEWS Mon Jul 04 01:27:37 2011 +0200 +++ b/Misc/NEWS Mon Jul 04 01:47:40 2011 +0200 @@ -209,6 +209,10 @@ Library ------- +- Issue #12451: runpy: run_path() now opens the Python script in binary mode, + instead of text mode using the locale encoding, to support other encodings + than UTF-8 (scripts using the coding cookie). + - Issue #12451: xml.dom.pulldom: parse() now opens files in binary mode instead of the text mode (using the locale encoding) to avoid encoding issues.

AltStyle によって変換されたページ (->オリジナル) /