I'm trying to run a python script from cron, but its not running properly so I'm assuming its the different path env variable. Is there anyway to change the variable within a python script?
-
1You should provide your operating system details. Also, this looks a lot like a possible duplicate - I recommend searching harder. – Tim McNamara Nov 02 '10 at 19:26
-
What does "not running properly" mean? Are you sure you're even starting your script (i.e. it can find your python binary at all) – Nick Bastin Nov 02 '10 at 19:32
-
I'm doing alot of Popen's with programs that have no paths with them. – Joe Schmoe Nov 02 '10 at 19:34
-
the cronlog says its running but the script isn't doing what its supposed to be doing. – Joe Schmoe Nov 02 '10 at 19:34
-
Please do not comment on your own question. It's your question. You can **update** it. Please **update** your question to contain **all** the facts. We can't guess. – S.Lott Nov 02 '10 at 19:46
-
2The title of this question should change. I came here because I actually want to change the path variable in a python script, not because I need information about running a python script from a cron job. – Klik Aug 09 '16 at 16:07
3 Answers
While the accepted answer works for the OP's purposes, and while the second answer is correct for updating the python sys.path variable, I think, if the OP weren't able to use the accepted answer (because, say, there was a policy against modifying the OS PATH variable on build/test machines), something like this SO answer would be what they are looking for. Summarizing the simple case here, to change the OS PATH environment variable:
app_path = os.path.join(root_path, 'other', 'dir', 'to', 'app')
os.environ["PATH"] += os.pathsep + app_path
At least, this is what I was hoping to find when I read the question.
-
5+1 for the case you want to set PATH (and PYTHONPATH is similar code) , though note that sys.path and os.environ['PATH'] are / can be different. – ntg Nov 20 '17 at 11:22
-
1This is what I understood while reading the OP's question as well. I was trying to set the PATH using `'export PATH=$PATH:' + THE_OTHER_PATH` and it wasn't working. – ranu Jan 22 '20 at 17:29
@unutbu has the right approach, but for what it's worth, @Joe Schmoe, if you ever need the info:
import sys
print sys.path
['.', '/usr/local/bin', '/usr/local/lib/python2.6/dist-packages',...]
sys.path.append('/home/JoeBlow/python_scripts')
print sys.path
['.', '/usr/local/bin', '/usr/local/lib/python2.6/dist-packages', '/home/JoeBlow/python_scripts',...]
sys.path is an array containing everything that was in your initiating script's PYTHONPATH variable (or whatever your shell's default PYTHONPATH is).

- 127,765
- 105
- 273
- 257

- 1,336
- 1
- 12
- 25
You shouldn't need to set the PATH from within the python script. Instead, put something like
USER=joe
HOME=/home/joe
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/some/other/path
PYTHONPATH=/home/joe/pybin
MAILTO=joe
LANG=en_US.UTF-8
#min hr day mon dow
*/5 12 * * * reminder.py 'Eat lunch'
at the top of your crontab. These environment variables will then be available to all cron jobs run through your crontab.

- 842,883
- 184
- 1,785
- 1,677