[HN Gopher] Easily handle CLI operation via Python instead of re...
___________________________________________________________________
Easily handle CLI operation via Python instead of regular Bash
programs
Author : EntICOnc
Score : 112 points
Date : 2022-02-11 16:01 UTC (1 days ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| VectorLock wrote:
| I've been using a kind of hacky analog of this for JSON for
| years, rather than messing around with jq, JMESpath, etc.
| https://gist.github.com/craigcalef/89799df3f2fc7957d84a1b06a...
| Naac wrote:
| This looks like an unmaintained version of (the much more
| complete) pyp:
|
| https://github.com/hauntsaninja/pyp
| daenz wrote:
| I love the motivation for this tool. This looks very useful for
| when you just want to make something easier in an existing shell
| script, without fully migrating to Python. If you _do_ want to
| migrate fully to Python, I encourage people to use sh[0]
| (disclaimer: author).
|
| One concern that I have is that it could be so useful that now
| your script is filled with `| pz`, and is launching Python
| processes at every line . Now you have a tangled hybrid of Bash
| and Python.
|
| 0. https://github.com/amoffat/sh
| LeoPanthera wrote:
| That is a really confusing name, since /bin/sh is the default
| shell in almost every unix.
| dahart wrote:
| This sh is a python lib, not a unix shell, so can't be easily
| confused.
| yunruse wrote:
| Dealing with a lot of `| pz` statements could be pretty quickly
| solved with eg a `pz` interpreter that can be explicitly given
| multiple sequences of inputs.
|
| That said, it would be amazing if `pz` could take in some input
| arguments and output the Unixy equivalent if it can find one.
| Klasiaster wrote:
| Or pz could be a lightweight wrapper that speaks to a python
| server or starts a new one if there isn't yet. The server
| could end after X seconds of not getting new requests.
| brtknr wrote:
| Probably easier to stick to bash rather than learn a new set of
| commands from scratch. Also bash commands are universally
| available whereas this needs to be installed first which is not
| always that straightforward. Also python is slower at some of the
| examples than compiled executables.
| fivea wrote:
| > Probably easier to stick to bash rather than the overhead of
| learning new set of commands that I need to learn from scratch.
|
| That's all fine and dandy until your shell script grows beyond
| a dozen lines of code or so. The moment that happens, shell
| scripts become barely readable and terribly hard to maintain,
| unlike alternatives such as python.
| otikik wrote:
| "Universal" is too much of a stretch. You still get tripped by
| things like "that flag doesn't exist in OSX sed" or "that
| option in git was only available in git > 2.8.14"
|
| And that's how you end up with bash scripts wrapped inside
| Docker images, that I have been seeing for the last couple of
| years.
| joseph8th wrote:
| And then there's `xonsh`, "The unholy union of bash and
| Python."[0]
|
| Which I've been using as my daily driver for a few years, and
| absolutely swear by it.
|
| https://xon.sh
| seanw444 wrote:
| What in the world... that's certainly _interesting_.
| pedrovhb wrote:
| I've been daily driving xonsh for a couple of years too. It
| _sounds_ like a terrible idea for reasons you can't quite put
| your finger on, but other than a minor annoyance every now and
| then, it's been great.
|
| I especially like iterating over files as Path objects with the
| simple syntax for f in p`.\*\.jpg`:
| if f.isdir(): foo = $(echo @(f.absolute()))
| suifbwish wrote:
| What sorcery is this?! Object oriented bash? Incredible.
| abnry wrote:
| PowerShell has entered the chat.
| kseistrup wrote:
| Looks great.
|
| It could be even more useful with an `f` variable that holds the
| 'words' obtained from splitting `s` at whitespace.
| hauntsaninja wrote:
| I wrote a similar tool a while back that lets you create your
| own "magic" variables. I use `f` all the time!
| https://github.com/hauntsaninja/pyp#pyp-lets-you-configure-y...
| kseistrup wrote:
| There it is! I knew I had seen something akin to pz. Thanks
| for the link!
| fmakunbound wrote:
| I will try this, but I still have ptsd from the last time I
| installed something python based.
| uniformlyrandom wrote:
| I don't know if I like this approach. Common "regular" Bash
| programs have a huge advantage - they are common. When I share my
| 'may accidentally conjure up a monster' one-liners with my team,
| I am sure they can read it, understand it, and run it. I lose
| that advantage with the use of a very nice, but obscure tool.
| tyingq wrote:
| Most of the examples would be relatively simple Perl or AWK
| one-liners. The appeal of this tool seems mostly to be that you
| can use Python, which isn't one-line friendly out of the box.
| ogogmad wrote:
| Bash involves tons and tons of arcania. It also doesn't support
| features that PL editors have like Intellisense. I sometimes
| feel like the only people who don't see a problem with the Unix
| experience are people who've used it day-in day-out for a
| decade, and don't need to grep man pages more than they'd like
| to. But by then, it's Stockholm Syndrome? I think this Github
| project might begin to pull out the chord. I know my Python
| better than I know my awk/sed/bash/xargs/find/make/bc...
| suifbwish wrote:
| Bash has one major advantage though: it's core libraries and
| and commands almost never change which mean your scripts are
| most likely going to work forever. Python core library
| development is filled with asshats who like to deprecate
| naming conventions in later versions rather than just
| improving the existing libraries and keeping the method names
| the same. Python is great for a lot of reasons but if you
| know bash well, it is far more reliable in the long term.
| jamespwilliams wrote:
| This seems very useful!
|
| The behaviour of auto-imports https://github.com/CZ-NIC/pz#auto-
| import seems bit scary:
|
| > Caveat: When accessed first time, the auto-import makes the row
| reprocessed. It may influence your global variables. Use verbose
| output to see if something has been auto-imported.
|
| It sounds like this could cause some very subtle bugs. Maybe a
| strong and clear warning when a line is being reprocessed would
| help.
| hauntsaninja wrote:
| I wrote a similar tool a while back. My solution for this was
| to statically analyse the input to discover unused names. The
| cool part of doing transformations statically is that you're
| able to see the exact Python code you'd run without running it,
| e.g. `pyp --explain x[:5]`. https://github.com/hauntsaninja/pyp
| gpvos wrote:
| That's just perl -pe or -ne.
| nomorecommas wrote:
| Very cool, though I probably won't use it.
| aasasd wrote:
| Ah, yes, the Perlton.
| freedomben wrote:
| For people that know Ruby, if you haven't explored Ruby's CLI
| abilities, you definitely, definitely should[1][2]. When I was
| building my (free and open source) awk course[3] I fell in love
| with awk. When I later found out that Ruby has some of the same
| features, it changed my life:
|
| [1]: https://robm.me.uk/2013/11/ruby-enp/
|
| [2]: https://benoithamelin.tumblr.com/ruby1line/
|
| [3]: https://github.com/FreedomBen/awk-hack-the-planet
| js2 wrote:
| Perl too. The -p, -n, -e switches work identically.
|
| -n causes Perl to assume the following loop around your
| program, which makes it iterate over filename arguments
| somewhat like sed -n or awk: LINE:
| while (<>) { ... # your program goes
| here }
|
| -p causes Perl to assume the following loop around your
| program, which makes it iterate over filename arguments
| somewhat like sed: LINE: while (<>)
| { ... # your program goes here
| } continue { print or die "-p destination: $!\n";
| }
|
| https://linux.die.net/man/1/perlrun
| p_l wrote:
| Little underappreciated part of Ruby these days is that part
| of it grew out of Perl, and specifically supports similar
| kind of scripting for daily tasks. Pretty sure both thsoe
| specific switches and some of the sigils used in syntax came
| from this Perl legacy.
| freedomben wrote:
| Yes thanks, I should have added that perl took it (and
| improved it) from awk, and ruby took it from perl. Most ruby
| people don't like to remember that ruby has a lot of perl-
| isms in it, but I think perl was a great language (and
| probably is, though I liked ruby so much better I never
| looked back).
| nomorecommas wrote:
| Yep, ruby is a natural, pipeline friendly, command line
| companion out of the box.
|
| https://github.com/learnbyexample/Command-line-text-processi...
|
| https://learnbyexample.github.io/learn_ruby_oneliners/
| rasengan wrote:
| https://github.com/realrasengan/jpipe
|
| A super simple version for JS
| visarga wrote:
| Nice, I made a similar tool for Perl. I chain them up to three
| rows in terminal, if they get longer I switch to a script.
___________________________________________________________________
(page generated 2022-02-12 23:00 UTC)