5 ms·
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.
by rocqua 9y ago
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.
- wryun 9y agoHave you tried plumbum or sh.py? They work well, if a bit magically, until you need to background a process.
- wutbrodo 9y agoThat 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
- _mhr_ 9y agoThank you for this.
- vapemaster 9y agoUse xonsh! Xonsh is an awesome fishy she'll that's a Python superset. $() is built right in.
- Goopplesoft 9y agoA 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 https://gist.github.com/pnegahdar/726cf2c65fc561db7831
- rollcat 9y agoTry playing with __getattr__, I'm sure "_.method" instead of "_(lambda x: x.method())" could be a thing.
- bobbyi_settv 9y agosubprocess.check_output(cmd) runs a command and returns the output, raising an exception if the command fails.
- camel_Snake 9y agoyou can do this in ipython A = !cmd