On Thu, Nov 05, 2020 at 09:41:45PM +0300, Paul Sokolovsky wrote:
On Thu, 5 Nov 2020 18:46:53 +0100 Hans Ginzel email@example.com wrote:
Is there a reason, why not to make python useful for practical one liners to replace perl and awk? There is page Powerful Python One-Liners, https://wiki.python.org/moin/Powerful%20Python%20One-Liners. But almost none of them handles files, behaves like unix filter or is ugly – must import modules, etc.
It seems that the command line options like -a, -n, -p, -F are still free. :-) https://docs.python.org/3/using/cmdline.html
I wish I had a dollar for every time I called `python -c ...` from the command line and forgot to explicitly call print. The interactive interpreter's automatic printing of expressions is extremely user-friendly, in comparison `python -c` much less so.
Likewise, the need to handle imports, explicit loops with newlines and indents etc makes Python much harder to use from the command line, and so much less useful. Many a time I've tried to run some quick command, couldn't get it to work.
Thankfully, command-line option "-m" is there for ages. And you're looking for
python3 -m <my_favorite_DSL> <any_arguments>
I don't think that is what Hans is asking for. I'm pretty sure Hans is not looking for a pre-existing script to provide arguments to. He is looking to write:
python <some invocation> <python code>
So more like `python -c ...` than `python -m ...`, only with some boilerplate needed for file handling performed automatically.
Hans even explicitly refers to `-c` in his post.
Perhaps that invocation will involve `-m`, like pydoc. But I think that there is a good case for mapping such a command line helper to a single option letter, even if that ultimately ends up being managed by a script rather than built into the interpreter.
Where <my_favorite_DSL> was put on https://pypi.org/ by you or similarly-minded people,
Do you have an *actual* "my_favorite_DSL" in mind? If you don't have a well-known package in mind, how do you expect Python users in general to know which "my_favorite_DSL" will solve this problem?
It might turn out that the right solution here will involve calling a script, like we call `-m unittest` or `-m doctest` etc. Maybe the best place for that is PyPI, but we shouldn't just dismiss Hans' suggestion with "just get it from PyPI".
and installed with:
pip3 install --user <my_favorite_DSL>
before running the previous command (needs to be done only once).
Needs to be done *once per user*, *per computer*.
And in many environments, that would have to be followed up by applying for unemployment benefits, assuming that you are still eligible for benefits after being fired with cause.
"Just use pip" is a truly privileged position to take, one which assumes that you have the ability and legal right to install third party software on the machine you are using, with unfettered access to PyPI. In the FOSS community, it is easy to forget that this is not the norm for many people. They use school laptops or corporate machines with restrictive policies and permissions, or they have regulatory laws that require long complex audits of any software before it can be installed.
Or they are sys admins who are working on production servers and they trust their own command line skills over unknown third party libraries they download off the internet.
I would be very interested in exploring what it takes to make it easier to use Python from the command line. Maybe Python's enforced indentation will make this a losing proposition, but I don't think we should be so dismissive of improving the command line functionality.