This question already has an answer here:
-
Specify working directory for popen
1 answer
I have a python script that is under this directory:
work/project/test/a.py
Inside a.py
, I use subprocess.POPEN
to launch the process from another directory,
work/to_launch/file1.pl, file2.py, file3.py, ...
Python Code:
subprocess.POPEN("usr/bin/perl ../to_launch/file1.pl")
and under work/project/, I type the following
[user@machine project]python test/a.py,
error "file2.py, 'No such file or directory'"
How can I add work/to_launch/
, so that these dependent files file2.py
can be found?
Your code does not work, because the relative path is seen relatively to your current location (one level above the test/a.py
).
In sys.path[0]
you have the path of your currently running script.
Use os.path.join(os.path.abspath(sys.path[0]), relPathToLaunch)
with relPathToLaunch = '../to_launch/file1.pl'
to get the absolute path to your file1.pl
and run perl
with it.
EDIT: if you want to launch file1.pl from its directory and then return back, just remember your current working directory and then switch back:
origWD = os.getcwd() # remember our original working directory
os.chdir(os.path.join(os.path.abspath(sys.path[0]), relPathToLaunch))
subprocess.POPEN("usr/bin/perl ./file1.pl")
[...]
os.chdir(origWD) # get back to our original working directory
Use paths relative to the script, not the current working directory
os.path.join(os.path.dirname(__file__), '../../to_launch/file1.pl)
See also my answer to Python: get path to file in sister directory?
You could use this code to set the current directory:
import os
os.chdir("/path/to/your/files")