4 ms·
It's not that simple. How are you passing argv to the bash script? What about how `subprocess.run` changes the error output to include Python exception spam? Pl
by quotemstr 2y ago
It's not that simple. How are you passing argv to the bash script? What about how `subprocess.run` changes the error output to include Python exception spam? Plus, in most editors, you lose all the bash syntax highlighting in the bash program chunk. I haven't seen a lot of hybrid programs like this work well.
- pwdisswordfishz 2y agoThat's why it's just the first stage of an incremental rewrite. argv is easy to pass, though.
- theamk 2y agoIt is that simple. You can pass arguments to `bash -c` with no problems(just don't forget a dummy $0). If you don't want exception spam, replace `check=True` with explicit exit. Here you go, it's 5 lines now. #!/usr/bin/env python3 import sys import subprocess result = subprocess.run(["bash", "-c", """ echo I am in bash, I have $# args, arg1 is "$1" set -x "$@" """, "dummy.sh"] + sys.argv[1:]) sys.exit(result.returncode) python's shell tooling is really good (if a bit verbose). And another cool thing is "shlex.quote", so you can write something like: subprocess.run(["bash", "-c", f"rsync {shlex.quote(filename)} somehost: | some-script"]) and have "filename" safely inserted into script fragment.. No command escapes, and newlines, quotes, backticks etc... are all handled properly. The bash syntax highlighting will disappear, correct, and that is a downside. But hey, you are supposed to be rewriting this in python, so it's just more motivation :)