I have an executable python script that exists in a "scripts" directory, and there's a symbolic link to that script (used to launch the file) in a root directory. Something like:
.
├── scripts
│ ├── const.py
│ ├── fops.py
│ ├── i_build.py
│ └── i_Props.ini
└── build_i -> scripts/i_build.py
I would like to be able to launch/run my scripts via:
python build_i
From the root directory. The i_build.py script will attempt to open i_Props.ini and do some magic based on what's in there.
The issue is that when the i_build.py script is launched via the symlink in the root directory, the i_build.py script will look in the root directory for the other files (not the /scripts directory where i_build.py is stored).
The i_build.py file has the props file location as:
PROP_FILE = "i_Props.ini"
and attempts to open that, and then fails. I do not want to hardcode a path for obvious reasons.
A quick test adding os.getcwd()
in the main file confirms my suspicions that it thinks the CWD is the root directory, and a check of __file__
says it is the symbolic link ("build_i").
Is there anything I can do to have python use the destination of the symbolic like for the __file__
name and CWD?
os.readlink()
, and run the script from the result withsubprocess.Popen()
. A bit clunky but does the job as nothing's hardcoded and it doesn't add dependencies. – Radiotelephone