[gdal-dev] gdal-utils: understanding the __main__ pattern
Even Rouault
even.rouault at spatialys.com
Sun Mar 6 02:52:38 PST 2022
Matt,
Le 04/03/2022 à 23:19, Matt Wilkie a écrit :
> Hello folks who know about the python script construction :)
>
> The pattern used in all of the python scripts under
> swig/python/gdal-utils is foreign to me. Can someone explain what's
> going on and why it's used? (or point to where this has been explored
> already).
>
> if__name__ == '__main__':
> sys.exit(main(sys.argv))
>
> Gdal utils .py all end with the block above. Everything else I've used
> to this point are more like:
>
> if__name__ == '__main__':
> main(sys.argv)
I believe the idea was that the main() function could be used as a
library function, in larger processing scripts, and thus using
sys.exit() in the main itself would be quite unfriendly. If you just do
main(sys.argv), the return value of the main wouldn't be propagated to
the caller, right ? Or perhaps "everything else" you are refering to
uses exceptions ?, and thus errors are naturally propagated to the caller.
>
> The motivation for asking (besides just being curious about something
> new!) is that I'm trying to figure out how we can use pip to create
> standard launch wrappers in PYTHONHOME\Scripts instead of manual
> post-install setup of the batch files we use now. When I change
> setup.py to do this via console_scripts the resulting wrappers fail on
> this main construct. So I need to understand what the original intent
> is to try and come up with a remedy.
>
> ```
> » gdal_edit fooo
> Traceback (most recent call last):
> File "C:\Users\Matt\.conda\envs\gdal\Scripts\gdal_edit-script.py",
> line 33, in <module>
> sys.exit(load_entry_point('gdal-utils', 'console_scripts',
> 'gdal_edit')())
> TypeError: main() missing 1 required positional argument: 'argv'
> ```
The issue seems to be different. I believe this was mentioned in a
recent ticket or pull request that the main() signature should probably
be changed to
def main(argv = None):
if argv is None:
argv = sys.argv
Take all the above with a grain of salt. I'm not an expert in the best
way to create idiomatic Python scripts. A large part of what we have too
is largely due to just things being like they are, not necessarily with
deep reasons.
Even
--
http://www.spatialys.com
My software is free, but my time generally not.
More information about the gdal-dev
mailing list