homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author vstinner
Recipients Michel Desmoulin, ammar2, ncoghlan, r.david.murray, vstinner, xtreak, yselivanov
Date 2019年10月21日.21:44:31
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1571694271.35.0.731718581204.issue20443@roundup.psfhosted.org>
In-reply-to
Content
I understand that the discussion is about my commit 3939c321c90283b49eddde762656e4b1940e7150 which changed multiple things:
---
 Python now gets the absolute path of the script filename specified on
 the command line (ex: ``python3 script.py``): the ``__file__`` attribute of
 the ``__main__`` module, ``sys.argv[0]`` and ``sys.path[0]`` become an
 absolute path, rather than a relative path.
---
I understand that the complain is not about sys.modules['__main__'].__file__ nor sys.path[0], but only sys.argv[0].
The sys.argv documentation says:
"The list of command line arguments passed to a Python script. argv[0] is the script name (it is operating system dependent whether this is a full pathname or not)."
https://docs.python.org/dev/library/sys.html#sys.argv
I understand that before my change, sys.argv[0] was sometimes relative, and sometimes absolute. With my change, sys.argv[0] should now always be asolute.
There are cases where an absolute path is preferred. There are cases where a relative path is preferred. I'm trying to understand the scope of the issue.
> https://github.com/google/python-gflags/blob/4f06c3d0d6cbe9b1fb90ee9fb1c082b3bf9285f6/gflags/flagvalues.py#L868-L869
I don't know this code. It seems like sys.argv[0] is used to lookup in a dict, and that dict keys are supposed to be "module names". I don't understand in which cases sys.argv[0] could be a module *name*, since sys.argv[0] seems like a relative or absolute path.
> https://github.com/HcashOrg/hcOmniEngine/blob/f1acc2ba3640a8e1c651ddc90a86d569d00704fe/msc-cli.py#L12
The code starts by sys.argv.pop(0): remove sys.argv[0].
> https://github.com/vmtk/vmtk/blob/64675f598e31bc6be3d4fba903fb59bf1394f492/PypeS/pyperun.py#L35
if sys.argv[0].startswith('pyperun'): ...
I understand that my change broke such test. Did this test work before my change when specifying the absolute path to run the script? Like path/to/pyperun.py rather than pyperun.py? Such code looks fragile: using os.path.basename() would be safer here.
> https://github.com/apache/lucene-solr/blob/cfa49401671b5f9958d46c04120df8c7e3f358be/dev-tools/scripts/svnBranchToGit.py#L783
 home = os.path.expanduser("~")
 svnWorkingCopiesPath = os.path.join(home, "svnwork")
 gitReposPath = os.path.join(home, "gitrepos")
 if sys.argv[0].startswith(svnWorkingCopiesPath) 
 or sys.argv[0].startswith(gitReposPath): ...
On my Linux, os.path.expanduser("~") is an absolute path and so svnWorkingCopiesPath and gitReposPath should be absolute paths, no?
My change made this code more reliable, rather than breaking it, no?
History
Date User Action Args
2019年10月21日 21:44:31vstinnersetrecipients: + vstinner, ncoghlan, r.david.murray, yselivanov, Michel Desmoulin, ammar2, xtreak
2019年10月21日 21:44:31vstinnersetmessageid: <1571694271.35.0.731718581204.issue20443@roundup.psfhosted.org>
2019年10月21日 21:44:31vstinnerlinkissue20443 messages
2019年10月21日 21:44:31vstinnercreate

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