Issue32984
Created on 2018-03-02 17:13 by terry.reedy, last changed 2018-03-05 19:46 by terry.reedy. This issue is now closed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 5981 | merged | terry.reedy, 2018-03-05 06:05 | |
| PR 5986 | merged | miss-islington, 2018-03-05 16:02 | |
| PR 5987 | closed | miss-islington, 2018-03-05 16:03 | |
| PR 5993 | merged | miss-islington, 2018-03-05 18:48 | |
| Messages (8) | |||
|---|---|---|---|
| msg313140 - (view) | Author: Terry J. Reedy (terry.reedy) * | Date: 2018-03-02 17:13 | |
'python somefile.py' sets main.__file__ to 'somefile.py'. 'python' leaves __file__ unset. If PYTHONSTARTUP is set to somefile.py, 'python' executes somefile.py in main with __file__ set to 'somefile.py', then unsets __file__ before the >>> prompt, as if somefile has not been executed. Any explicit setting of __file__ in somefile is undone. tem2.py: print(__name__, __file__) __file__ = 'abc.py' > F:\dev\3x> set PYTHONSTARTUP=f:/python/a/tem2.py > F:\dev\3x> python ... __main__ f:/python/a/tem2.py >>> __file__ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '__file__' is not defined With IDLE, when 'python -m idlelib.idle' is run with '-s' or '-r f:/python/a/tem2.py', NameError is raised for the print in tem2.py. This was reported this SO question. https://stackoverflow.com/questions/49054093/cannot-use-file-when-opening-module-in-idle In both cases, the file is run with execfile(filename). def execfile(self, filename, source=None): "Execute an existing file" if source is None: with tokenize.open(filename) as fp: source = fp.read() My guess is that wrapping the source with f"__file__ = {filename}\n" and "del __file__\n" should work. |
|||
| msg313151 - (view) | Author: Terry J. Reedy (terry.reedy) * | Date: 2018-03-02 17:52 | |
When the IDLE GUI process is started, its main.__file__ is set to the idlelib .py file used to start the process. If IDLE is started with -n, so that user code is run in the same process (the original mode), the -r or -s startup file and code entered at >>> sees this value*, rather than the user startup file name or a NameError. * I am not sure why it does not see the value of __file__ in the pyshell module, which I would expect to be '.../idlelib/pyshell.py'. The change proposed above would fix __file__ for -n also, but would disable any subsequently executed idle code that uses __file__ that gets unset. So I think the wrapping should be conditioned on use_subprocess (True unless -n). |
|||
| msg313152 - (view) | Author: Terry J. Reedy (terry.reedy) * | Date: 2018-03-02 18:00 | |
Revised, more exact, URL: https://stackoverflow.com/questions/49054093/cannot-use-file-when-running-startup-file-in-idles-normal-mode |
|||
| msg313238 - (view) | Author: Terry J. Reedy (terry.reedy) * | Date: 2018-03-05 06:43 | |
With the PR, IDLE behaves the same as Python on Windows. .../3x> python -m idlelib -r f:/python/a/tem2.py (see original post for content of tem2.py) prints __file__ instead of raising NameError, while >>> __file__ continues to raise NameError Cheryl, I really expect the PR to work on linux, but can you manually test it anyway? If you think the blurb needs rst markup and feel like adding some, go ahead. |
|||
| msg313248 - (view) | Author: Cheryl Sabella (cheryl.sabella) * | Date: 2018-03-05 13:59 | |
The change works on Linux with the patch (and gave a NameError without the patch). I left a note on the PR for a possible SyntaxError. I didn't have authority to push the blurb markup change to your branch, so I copied it into a comment. If you click edit on it, you should be able to cut and paste it as is into the blurb file. |
|||
| msg313254 - (view) | Author: Terry J. Reedy (terry.reedy) * | Date: 2018-03-05 16:02 | |
New changeset 22c82be5df70c3d51e3f89b54fe1d4fb84728c1e by Terry Jan Reedy in branch 'master': bpo-32984: IDLE - set __file__ for startup files (GH-5981) https://github.com/python/cpython/commit/22c82be5df70c3d51e3f89b54fe1d4fb84728c1e |
|||
| msg313267 - (view) | Author: miss-islington (miss-islington) | Date: 2018-03-05 16:49 | |
New changeset fd340bf9e308130736c76257ff9a697edbeb082d by Miss Islington (bot) in branch '3.7': bpo-32984: IDLE - set __file__ for startup files (GH-5981) https://github.com/python/cpython/commit/fd340bf9e308130736c76257ff9a697edbeb082d |
|||
| msg313280 - (view) | Author: miss-islington (miss-islington) | Date: 2018-03-05 19:23 | |
New changeset 6935a511670797a3aaebdf96aad3dcff66baa76e by Miss Islington (bot) in branch '3.6': bpo-32984: IDLE - set __file__ for startup files (GH-5981) https://github.com/python/cpython/commit/6935a511670797a3aaebdf96aad3dcff66baa76e |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2018-03-05 19:46:08 | terry.reedy | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
| 2018-03-05 19:23:11 | miss-islington | set | messages: + msg313280 |
| 2018-03-05 18:48:15 | miss-islington | set | pull_requests: + pull_request5760 |
| 2018-03-05 16:49:20 | miss-islington | set | nosy:
+ miss-islington messages: + msg313267 |
| 2018-03-05 16:03:55 | miss-islington | set | pull_requests: + pull_request5754 |
| 2018-03-05 16:02:58 | miss-islington | set | stage: needs patch -> patch review pull_requests: + pull_request5753 |
| 2018-03-05 16:02:48 | terry.reedy | set | messages: + msg313254 |
| 2018-03-05 13:59:54 | cheryl.sabella | set | messages: + msg313248 |
| 2018-03-05 06:43:40 | terry.reedy | set | nosy:
+ cheryl.sabella messages:
+ msg313238 |
| 2018-03-05 06:05:13 | terry.reedy | set | keywords:
+ patch stage: needs patch -> patch review pull_requests: + pull_request5747 |
| 2018-03-02 18:00:19 | terry.reedy | set | messages: + msg313152 |
| 2018-03-02 17:52:55 | terry.reedy | set | messages: + msg313151 |
| 2018-03-02 17:13:39 | terry.reedy | create | |