Is there a better way to set a system clock in Python (on a Linux system)
KDr2
killy.draw at gmail.com
Wed May 5 23:01:54 EDT 2010
man 2 clock_settime
call it with ctypes
--
Best Regards,
-- KDr2 http://kdr2.net
On Thu, May 6, 2010 at 10:47 AM, J <dreadpiratejeff at gmail.com> wrote:
> Is there a better way to do this?
>
> def SkewTime():
> '''
> Optional function. We can skew time by 1 hour if we'd like to see real
> sync
> changes being enforced
> '''
> TIME_SKEW=1
> logging.info('Time Skewing has been selected. Setting clock ahead 1
> hour')
> # Let's get our current time
> t = TimeCheck()
> logging.info('Current time is: %s' % time.asctime(t))
> # Now create new time string in the form MMDDhhmmYYYY for the date
> program
> hr = t.tm_hour + TIME_SKEW
> date_string = time.strftime('%m%d%H%M%Y',(t.tm_year,
> t.tm_mon,
> t.tm_mday,
> hr,
> t.tm_min,
> t.tm_sec,
> t.tm_wday,
> t.tm_yday,
> t.tm_isdst))
> logging.debug('New date string is: %s' % date_string)
> logging.debug('Setting new system time/date')
> status = SilentCall('/bin/date %s' % date_string)
> logging.info('Pre-sync time is: %s' % time.asctime())
>
> TimeCheck() as referenced above is a simple function that just returns
> the time.time_struct object from time.localtime(). I pull time a few
> times and it was a little cleaner to put that into a function and just
> call the function whenever I needed to.
>
> SilentCall() is a modification of subprocess.call() (which in reality
> just calls Popen(*popenargs,**kwargs).wait()) but it defaults to
> redirecting stdin and stdout to /dev/null to suppress shell output
> from the command being called.
>
> Anyway, what I'm wondering, is, while this works, is there a better
> way to do it than using part of the originally returned time_struct
> and injecting my own new hour argument (hr).
>
> The goal of this function is to just set the system clock one hour
> ahead, so when I call the Linux command 'ntpdate' I can get a real
> time change when it syncs the local clock to an NTP server.
>
> This just looks... well, big to me. I tried passing only the things I
> really needed to time.strftime(), but apparently, that requires the
> full 9-tuple from time_struct, not just individual parts of it.
>
> Like I said, it works well, I just wonder if there is a cleaner way of
> setting the local clock to a different time in python without having
> to do all this. The reason most of that exists, is because the linux
> date command expects to see the new date/time like this:
> MMDDhhmmYYYY.ss.
>
> Or am I just looking at this too hard and really did work it out nicely?
>
> Cheers
> Jeff
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20100506/5f71517a/attachment-0001.html>
More information about the Python-list
mailing list