I need to run a python command inside a Popen. The problem is that the command NEEDS to run in python3 and I need it to be portable, which means that I can't really use the python3
alias for every situation...
I have computers where python
is already the correct version, and others where the correct one is python3
. I tried to insert #!/usr/bin python3
in the beginning of the file and then run as python
but it didn't work.
I can't modify environment vars to change python3
to python
. I would like to know if there is a way to check which one I need to use or a way to change the python3
to python
ONLY inside the Popen command...
The Popen command I am trying to run is very simple and no I can't just import the file and use as a class... it needs to be ran through Popen. Also, virtualenv or similars are not an option.
subprocess.Popen(['python', 'main.py'], shell=True, universal_newlines=True)
The shebang -- the initial line showing which interpreter to use, such as #!/usr/bin/python
or #!/usr/bin/python3
-- is only honored if you don't explicitly select an interpreter yourself: If you run python foo.py
, the OS is invoking a specific Python interpreter and passing it foo.py
as an argument (which it interprets as the name of a script it should run); whereas when you run ./foo.py
, you're telling the OS itself to figure out which interpreter to use to run foo.py
, which it does by looking at the shebang.
To leave it up to the operating system to select, just explicitly specify the name of your script:
subprocess.Popen(['./main.py'], universal_newlines=True)