I think it would be a tad more convincing if there was a way to pass arguments too (even if just a list of strings). At the very least extra arguments should end up in sys.argv[1:].

Then again, presumably the function must be specially crafted for this usage. Why can't you just specially craft a module's main()?

On Tue, Oct 20, 2020 at 7:10 PM Michael Smith <michael@smith-li.com> wrote:
There are many ways to invoke a function from the commandline. You can
use setuptools' console_scripts entrypoint. You can use a decorator
from click. And of course you can always do the classic

if __name__ == "__main__":

to call whatever main() is. But there are inconveniences with these
approaches. For setuptools, you have to actually run setup, somehow.
For click, you have to install click. And for __name__, you are either
locked into a single function name, or you have to write some arg
parsing to determine what name to use.

I propose it would be nice to be able to call a function from python,
using syntax like

python -m module:thunk

The simplest proposal, I think, is if the function must accept no
arguments -- or at least no required ones. This could be as
straightforward as just being shorthand for

python -c 'import module; module.thunk()'

and remove a small amount of code that is repeated very frequently.

I picked the colon syntax because that is what several other tools
that enable calling functions from the commandline seem to do, but if
your only objection is the specific syntax I picked, please propose a
different one.

What do you think?
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@python.org
Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/JWLFOEOVGQKPD6F7ZHS5PWYIEMYOFUQ5/
Code of Conduct: http://python.org/psf/codeofconduct/

--Guido van Rossum (python.org/~guido)
Pronouns: he/him (why is my pronoun here?)