21

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?

Joe Schmoe
  • 563
  • 3
  • 6
  • 8
  • 1
    You 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
  • 2
    The 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 Answers3

52

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.

Community
  • 1
  • 1
hlongmore
  • 1,603
  • 24
  • 28
  • 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
  • 1
    This 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
18

@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).

ChrisGPT was on strike
  • 127,765
  • 105
  • 273
  • 257
Greg Gauthier
  • 1,336
  • 1
  • 12
  • 25
5

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.

unutbu
  • 842,883
  • 184
  • 1,785
  • 1,677