I'm writing a (somewhat) modular application in Python 3 and I'd like to run arbitrary programs from it, said program being specified at runtime and not necessarily a python script.
So I use for example,
subprocess.call([spam, "-i", eggs, "-o", ham])
If spam is a python script, with shebang to python3 and executable rights, I get
OSError: [Errno 8] Exec format error
if I
subprocess.call(["python3", spam, "-i", eggs, "-o", ham])
it works fine.
Do you know why? How can I run spam without specifying python3?
You need to use shell=True, and you need your array to be turned into a command string, like this:
subprocess.call(' '.join([spam, "-i", eggs, "-o", ham]), shell=True)
This will invoke the shell instead of the direct command, and the shell should be able to handle the shebang.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With