Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Executing python scripts with subprocess.call using shebang

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?

like image 497
Evpok Avatar asked Sep 11 '26 10:09

Evpok


1 Answers

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.

like image 158
Chris Eberle Avatar answered Sep 14 '26 00:09

Chris Eberle