Message355105
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? |
|
Date |
User |
Action |
Args |
2019-10-21 21:44:31 | vstinner | set | recipients:
+ vstinner, ncoghlan, r.david.murray, yselivanov, Michel Desmoulin, ammar2, xtreak |
2019-10-21 21:44:31 | vstinner | set | messageid: <1571694271.35.0.731718581204.issue20443@roundup.psfhosted.org> |
2019-10-21 21:44:31 | vstinner | link | issue20443 messages |
2019-10-21 21:44:31 | vstinner | create | |
|