(:func:`sys.getfilesystemencoding`). If *closeit* is true, the file is
closed before PyRun_SimpleFileExFlags returns.
+ .. note::
+ On Windows, *fp* should be opened as binary mode (e.g. ``fopen(filename, "rb")``.
+ Otherwise, Python may not handle script file with LF line ending correctly.
+
.. c:function:: int PyRun_InteractiveOne(FILE *fp, const char *filename)
script_name, script_name, script_dir, '',
importlib.machinery.SourceFileLoader)
+ def test_issue20884(self):
+ # On Windows, script with encoding cookie and LF line ending
+ # will be failed.
+ with support.temp_dir() as script_dir:
+ script_name = os.path.join(script_dir, "issue20884.py")
+ with open(script_name, "w", newline='\n') as f:
+ f.write("#coding: iso-8859-1\n")
+ f.write('"""\n')
+ for _ in range(30):
+ f.write('x'*80 + '\n')
+ f.write('"""\n')
+
+ with support.change_cwd(path=script_dir):
+ rc, out, err = assert_python_ok(script_name)
+ self.assertEqual(b"", out)
+ self.assertEqual(b"", err)
+
@contextlib.contextmanager
def setup_test_pkg(self, *args):
with support.temp_dir() as script_dir, \
pymain_run_file(_PyCoreConfig *config, PyCompilerFlags *cf)
{
const wchar_t *filename = config->run_filename;
- FILE *fp = _Py_wfopen(filename, L"r");
+ FILE *fp = _Py_wfopen(filename, L"rb");
if (fp == NULL) {
char *cfilename_buffer;
const char *cfilename;