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– Tim McNamara2010-11-02 19:26:08 +00:00Commented Nov 2, 2010 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– Nick Bastin2010-11-02 19:32:49 +00:00Commented Nov 2, 2010 at 19:32
-
I'm doing alot of Popen's with programs that have no paths with them.Joe Schmoe– Joe Schmoe2010-11-02 19:34:06 +00:00Commented Nov 2, 2010 at 19:34
-
the cronlog says its running but the script isn't doing what its supposed to be doing.Joe Schmoe– Joe Schmoe2010-11-02 19:34:32 +00:00Commented Nov 2, 2010 at 19:34
-
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– Klik2016-08-09 16:07:12 +00:00Commented Aug 9, 2016 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.
2 Comments
'export PATH=$PATH:' + THE_OTHER_PATH and it wasn't working.@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).
Comments
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.