Abhinav Kumar
Abhinav Kumar

Reputation: 33

How to run "source" command from python?

I need to set up the ROS2 Galactic environment by sourcing the following file through python: -

"source /opt/ros/galactic/setup.bash"

If I write the above line in terminal it will be sourced but I need to do this from python script.

I tried: -

import subprocess
subprocess.call("source /opt/ros/galactic/setup.bash", shell=True)

and

import os
os.system('source /opt/ros/galactic/setup.bash')

But none of them is sourcing the enviornment. I am working on Ubuntu 20.04, Python 3.8.10.

Upvotes: 1

Views: 1005

Answers (1)

Adon Bilivit
Adon Bilivit

Reputation: 27196

This will not impact your Python runtime environment. subprocess starts a shell wherein it runs your script (setup.bash) and then terminates.

Consider this:

import subprocess
import os

subprocess.run('export FOO=1', shell=True)
print(os.environ['FOO'])

This tries to set an environment variable in the sub-shell. That actually works but when run() returns, the shell no longer exists. Thus, when we try to access the environment variable we get KeyError

Upvotes: 0

Related Questions