I was just about to say that I’d be raising an error, not returning a string.
I see you understand the code well.
I was just about to say that I’d be raising an error, not returning a string.
I see you understand the code well.
fair. there’s a lot of only kinda gun fun stuff after that side from the good stuff. i gave up at math.
but where is the couple kissing?
Succinctness, mainly. but honestly, that succinctness call can also be mostly acquired using sh.py
, which is what I normally use if I’m using python as a sort of shell scripting - mostly because sh.py
is a very minimal requirement, whereas Xonsh has quite a few dependencies.
addendum: I’d say, if you’re already using Xonsh, and aren’t really looking to share your script with anyone other than Xonsh users or your own systems, you’d probably like to use .xsh scripts. But if you’re looking to share your script, use sh.py
.
It’s a superset of python, so valid python should run fine. Imports into your shell are doable, too – for example, I import path.Path
in my xonshrc, so it’s always available when I hit the shell. I don’t often have to use Path
, because regular shell commands are often more straightforward. But when I do, it’s nice to have it already loaded. Granted, that could get kooky, depending on what you import and execute.
You can associate/shebang Xonsh with .xsh files, or run “xonsh foo.xsh” - and that works like “bash foo.sh” would, except using xonsh syntax, of course.
It’s not Bash compatible - copypasta of scripts may not work out. But it’s a good shell with some typical shell semantics.
there are some great plugins, too - like autovox, which allows you to create python venvs associated with specific subfolders. so, cd myproject
does the equivalent of cd myproject; . path/to/venv/bin/activate
.
overall, there definitely is some jank, but it’s a great tool and I love it.
I like nushell, but I love xonsh. Xonsh is the bastard love child of Python and Bash.
it can be thought of as:
Now, that’s not a very accurate description, because the reality is more nuanced, but it allows for things like:
for file in !(find | grep -i '[.]mp3^'):
file = Path(file.strip())
if file != Path('.') and file != file.with_suffix('.mp3'):
mv @(file) @(file.with_suffix('.mp3'))
Now, there are things in there I wouldn’t bother with normally - like, rather than using mv
, I’d just use file.rename()
, but the snippet shows a couple of the tools for interaction between xonsh and sh.
But, either a line is treated in a pyhony way, or in a shelly way - and if a line is shelly, you can reference Python variables or expressions via @(), and if it’s Pythony, you can execute shell code with !() or $(), returning the lines or the exact value, respectively.
Granted, I love python and like shell well enough, and chimeras are my jam, so go figure.
yeah, really lets you lay down sick code like a mad hacker. I love it.