Using Cron to run a python program
I'm using python 2.4 running on Fedora Core 4. I have written a python program called ipscan.py that checks the external ip address of my cable internet connection, and on change, will update the dns records at my dns provider, zoneedit. So basically, I've setup dynamic dns using python. Once the ip compare and/or update is complete, I log the results to a text file called update.log. When I run the program in a bash shell with the command "python ipscan.py", the program runs fine and the results are appended to update.log. When I run this program as a cron job under the root user with the previously mentioned command, the program runs without errors but does not append an entry to the log. The permissions on the update.log file should not be an issue since I'm running the cron job as root, but I've given root write permissions just to be safe. What would cause the logging to work at a command prompt but fail in cron? I'm not getting any errors in the cron logs or /var/spool/mail/root. Thanks for your assitance. -- http://mail.python.org/mailman/listinfo/python-list
Re: Using Cron to run a python program
You were right!! I had a relative path to the update.log file, so I looked in the home path of the cron environment and found the update.log file that the cron job was writing to. I updated my program to point to the absolute path of the update.log file that I wanted the logs written to, and now it works. Thanks, Brad Steve Holden wrote: > Carsten Haese wrote: > > On 23 Nov 2005 16:23:11 -0800, vagrantbrad wrote > > > >>I'm using python 2.4 running on Fedora Core 4. I have written a python > >>program called ipscan.py that checks the external ip address of my > >>cable internet connection, and on change, will update the dns records > >>at my dns provider, zoneedit. So basically, I've setup dynamic dns > >>using python. Once the ip compare and/or update is complete, I log the > >>results to a text file called update.log. When I run the program in > >>a bash shell with the command "python ipscan.py", the program runs fine > >>and the results are appended to update.log. When I run this program > >>as a cron job under the root user with the previously mentioned > >>command, the program runs without errors but does not append an > >>entry to the log. The permissions on the update.log file should not > >>be an issue since I'm running the cron job as root, but I've given > >>root write permissions just to be safe. What would cause the > >>logging to work at a command prompt but fail in cron? I'm not > >>getting any errors in the cron logs or /var/spool/mail/root. > > > > > > You're not giving us much detail about your script, so we can only guess. My > > guess is that your python script is either not invoked at all or it dies > > (raises an exception) before appending to the update.log. > > > > You should keep in mind that cron jobs don't run in a normal login shell, > > don't have the normal environment variables, and are not attached to a tty. > > Any of those factors can conceivably cause a script to fail under cron when > > it > > works fine from a shell. > > > Since we're guessing, *my* guess would be that the cron-triggered runs > are running in some directory other than the one the manually-triggered > jobs are, and that there is a separate update.log file in that directory. > > The fix, of course, would be to use an absolute path to identify the log > file (if I'm right). > > regards > Steve > -- > Steve Holden +44 150 684 7255 +1 800 494 3119 > Holden Web LLC www.holdenweb.com > PyCon TX 2006 www.python.org/pycon/ -- http://mail.python.org/mailman/listinfo/python-list
Tkinter button not working as expected
I've created a short test program that uses tkFileDialog.askdirectory to help the user input a path into a tk entry widget. The problem I'm having is that when I run the code as listed below, the getPath function is called when the program initially runs, not when the button is pressed. from Tkinter import * import tkFileDialog class App: def __init__(self, master): frame = Frame(master) frame.pack() t = StringVar() self.entry = Entry(frame, textvariable=t) self.entry.pack(side=LEFT) self.button = Button(frame, text="Select", fg="red") self.button["command"] = self.getPath(t) self.button.pack(side=LEFT) def getPath(self, t): dirPath = tkFileDialog.askdirectory(initialdir="c:\\") print dirPath t.set(dirPath) root = Tk() app = App(root) root.mainloop() The problem arises when I try to pass the t variable in the "command" option of the button widget. If I set the command to "command=self.getpath" rather than "command=self.getpath(t)", then I don't get this issue. But I would like to be able to pass a variable to the the function through the command option. I'm a Tk newbie what am I doing wrong? -- http://mail.python.org/mailman/listinfo/python-list
Re: Tkinter button not working as expected
Thank you Fredrik. It makes total sense now that you've explained it this way. I frustrated at my ignorance on the assignment issue :) Fredrik Lundh wrote: > [EMAIL PROTECTED] wrote: > > > I've created a short test program that uses tkFileDialog.askdirectory > > to help the user input a path into a tk entry widget. The problem I'm > > having is that when I run the code as listed below, the getPath > > function is called when the program initially runs, not when the button > > is pressed. > > the right side of an assignment is always evaluated before it is assigned, so > > self.button["command"] = self.getPath(t) > > will call self.getPath(t) and then assign the return value to > button["command"]. > quite obvious, if you think about it, right ? > > the easiest way to fix this is to add a local function that calls getPath, and > use that as the button callback: > > def callback(): > self.getPath(t) > self.button["command"] = callback > > (if you want, you can inline the getPath code in the callback). > > -- http://mail.python.org/mailman/listinfo/python-list