From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Mon, 5 Mar 2018 16:49:15 +0000 (-0800) Subject: bpo-32984: IDLE - set __file__ for startup files (GH-5981) X-Git-Tag: v3.7.0b3~99 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fd340bf9e308130736c76257ff9a697edbeb082d;p=python bpo-32984: IDLE - set __file__ for startup files (GH-5981) Like Python, IDLE optionally runs one startup file in the Shell window before presenting the first interactive input prompt. For IDLE, option -s runs a file named in environmental variable IDLESTARTUP or PYTHONSTARTUP; -r file runs file. Python sets __file__ to the startup file name before running the file and unsets it before the first prompt. IDLE now does the same when run normally, without the -n option. (cherry picked from commit 22c82be5df70c3d51e3f89b54fe1d4fb84728c1e) Co-authored-by: Terry Jan Reedy --- diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py index 8b07d52cc4..ee1313161d 100755 --- a/Lib/idlelib/pyshell.py +++ b/Lib/idlelib/pyshell.py @@ -635,6 +635,9 @@ class ModifiedInterpreter(InteractiveInterpreter): if source is None: with tokenize.open(filename) as fp: source = fp.read() + if use_subprocess: + source = (f"__file__ = r'''{os.path.abspath(filename)}'''\n" + + source + "\ndel __file__") try: code = compile(source, filename, "exec") except (OverflowError, SyntaxError): diff --git a/Misc/NEWS.d/next/IDLE/2018-03-05-01-29-05.bpo-32984.NGjgT4.rst b/Misc/NEWS.d/next/IDLE/2018-03-05-01-29-05.bpo-32984.NGjgT4.rst new file mode 100644 index 0000000000..15d40b72ca --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2018-03-05-01-29-05.bpo-32984.NGjgT4.rst @@ -0,0 +1,7 @@ +Set ``__file__`` while running a startup file. Like Python, IDLE optionally +runs one startup file in the Shell window before presenting the first interactive +input prompt. For IDLE, ``-s`` runs a file named in environmental variable + :envvar:`IDLESTARTUP` or :envvar:`PYTHONSTARTUP`; ``-r file`` runs +``file``. Python sets ``__file__`` to the startup file name before running the +file and unsets it before the first prompt. IDLE now does the same when run +normally, without the ``-n`` option.