Hacker News new | past | comments | ask | show | jobs | submit login

The few times I tried to de shell like things in Python, the absolute pain of actually running commands and getting to their output might be part of the reason.

What is A=$(cmd) in bash is an absolute pain in python.




That was my main pain initially after I finally switched away from writing my scripts in Bash, but it actually turned out to be pretty easy. I wrote a quick helper function that does 99% of what I need:

def _call(cmd_str): return subprocess.check_output(shlex.split(cmd_str)).decode("utf-8")

Definitely a verbose monstrosity compared to doing it in bash, but more than worth avoiding the garbage fire that is Bash. And it only works for simple cases


Thank you for this.


Have you tried plumbum or sh.py?

They work well, if a bit magically, until you need to background a process.


Use xonsh!

Xonsh is an awesome fishy she'll that's a Python superset. $() is built right in.


A while back I wrote a little test snippet[1] to see how good such an interface can get in python.

    _("ls -la") | _(lambda x: x.split()[-1]) | _(lambda x: os.path.splitext(x)[1])
I wonder if there's a complete version of something like this out there. You can probably get pretty far staying in Python-land, plus, everything else is free (data types, standard library, adoption, etc).

[1] https://gist.github.com/pnegahdar/726cf2c65fc561db7831


Try playing with __getattr__, I'm sure "_.method" instead of "_(lambda x: x.method())" could be a thing.


subprocess.check_output(cmd) runs a command and returns the output, raising an exception if the command fails.


you can do this in ipython

A = !cmd




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: