> OK, I did what you instructed and checked the log file, which did
> contain the system path and the traceback about the "can't import
> module...".

Your script did run (you thought it completely failed), but -only- up  
the 'import feedparser' part. Anything before that ('print sys.path')  
actually worked fine.
Printing the sys.path is often quite useful to debug things like this.


> I see the paths specified don't contain the path to the feedparser
> module, which explains the error. My question is how do I add this
> path in the cron, especially since the script runs from the command
> line?

Presumably the environment variables you can set in your cron file are  
limited (to, eg HOME and EMAIL), which is why things don't work.
Assuming this cron works the same as other ones I know, you can set  
the variables on the command line itself; that may work.

Try this entry in your cron (and remove the top part with the  
environment variable settings):

1 * * * * PYTHONPATH=/path/to/python2.3/site-packages:/path/to/django/ 
app  DJANGO_SETTINGS_MODULE=myproject.settings  /usr/bin/python /path/ 
to/script/update_feeds.py > /path/to/script/update_feeds.log 2>1

(in case mailers mess up things: there are no line breaks in that line)
The log file part is still there to check if things go wrong, but if  
it works fine, remove that part ('> /path/to/script/update_feeds.log  
2>1')

If this seems a bit messy, you can alter the sys.path at the top of  
your script, and set the DJANGO_SETTINGS_MODULE from there as well:

import sys
sys.path.extend(['/path/to/python2.3/site-packages', '/path/to/django/ 
app')
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
.
.
.
import feedparser
<etc>


I prefer the first, since then the script itself is more portable (no  
hardcoded paths etc).

I also came across this thread: 
http://groups.google.com/group/django-users/browse_thread/thread/d77412f3bbbd1d1a/64d567aadbf4b3f9?hl=en&lnk=gst&q=cron#64d567aadbf4b3f9
which uses something slightly different (solution at the bottom). But  
since this involves settings everything in your .bashrc (including  
possibly silly greetings like 'echo "How are you today"), that may be  
a bit overkill.

Let me know if it works.



>>> Well part of the problem is that the script itself works fine. I can
>>> run from the command line without a hitch. But when I try to run it
>>> via the cron, I get the traceback about the feedparser module.
>>
>> I believe that, because your PYTHONPATH will be set correctly from  
>> the
>> command line; but possibly not from a default (basic) shell that cron
>> uses.
>> So, again, try putting those two statements at the top of your  
>> script,
>> -before- the 'import feedparser' statement, and let cron do its job.
>> You may need to redirect the output, eg
>> 1 * * * * /usr/bin/python /path/to/script/update_feeds.py > /path/to/
>> script/update_feeds.log 2>&1
>> to get that output (I'm not sure how you got the error from the cron
>> job; through email?)
>>
>> Check the log file: before the traceback, you should see the result  
>> of
>> 'print sys.path'. Check if that includes the correct directories.
>>
>>>> Top of script (possibly just below the she-bang):
>>
>>>> import sys
>>>> print sys.path
>>
>>>>>>> Traceback (most recent call last):
>>>>>>> File "/path/to/script/update_feeds.py", line 10, in ?
>>>>>>> import feedparser
>>>>>>> ImportError: No module named feedparser
>>
>>>>>>> And here is the cron:
>>
>>>>>>> export PYTHONPATH=/path/to/python2.3/site-packages:/path/to/
>>>>>>> django/
>>>>>>> app
>>>>>>> export DJANGO_SETTINGS_MODULE=myproject.settings
>>>>>>> 1 * * * * /usr/bin/python /path/to/script/update_feeds.py
>>
>>>>>>> I'm running the cron on my Dreamhost account BTW.
>>
>>>>>> Did you try printing out the sys.path at the top of your  
>>>>>> script, so
>>>>>> see if the PYTHONPATH is picked up correctly from the cron
>>>>>> environment
>>>>>> settings? I'd guess it should, but it may go wrong there (I'm no
>>>>>> cron
>>>>>> expert).
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to