]> granicus.if.org Git - python/commitdiff
bpo-32984: IDLE - set __file__ for startup files (GH-5981)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 5 Mar 2018 19:23:08 +0000 (11:23 -0800)
committerGitHub <noreply@github.com>
Mon, 5 Mar 2018 19:23:08 +0000 (11:23 -0800)
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 <tjreedy@udel.edu>
Lib/idlelib/pyshell.py
Misc/NEWS.d/next/IDLE/2018-03-05-01-29-05.bpo-32984.NGjgT4.rst [new file with mode: 0644]

index 8b07d52cc4872ad71aa87132de40316e64af5d17..ee1313161da31843236949ba09190828020e66ef 100755 (executable)
@@ -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 (file)
index 0000000..15d40b7
--- /dev/null
@@ -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.