Hi,

So firstly, I know it's been mentioned before and there's a reluctance to 
add dependencies on external modules for this, but there do appear to be 
some that would be very useful and give broad support for OS uptime 
reporting, eg:

https://pypi.org/project/uptime/

That said, if we want a dependency-free subset of those things here based 
on OS switching as suggested above, would something like this approach be 
in the right direction?

https://pastebin.com/fUVHEJr3

I get that the exception handling in that code is... rudimentary :) Happy 
to take suggestions for improvements (this is literally the first time I've 
ever tried to write python, so I'm sure I'm making lots of mistakes).

In any event, I've tested it only on OpenBSD. The MacOS and Linux code is 
basically just copied and pasted (but again, I haven't tested it), and the 
NetBSD stuff was just copied and pasted as well with one small change: I 
noticed that it looks as though the same mistake was made in that code that 
I made: assuming an int return type for the sysctlbyname, whereas the doco 
indicates it does in fact return a timeval, which is also a c_longlong and 
then a c_long (ultimately). Both of ours worked presumably because we 
aren't in the unix epoch yet and either python was just overallocating 
memory which wasn't used, or was internally converting the return type into 
the smaller datatype.

In any event, since I'd figured out the structs thing for the OpenBSD 
version, I ported that change back to the NetBSD - but obviously, someone 
with NetBSD will need to test that it still works correctly.

I also peeked at one of those other libraries for how they did windows 
uptime - consistent with the other cut-down versions for the other OSes, 
I've included an untested cut-down version of how they do it that should 
work (possibly with a little tweaking) with more recent windows versions. 
Again, this will need testing.

Thoughts?

Regards,
Jon.

On Tuesday, 16 April 2019 08:09:21 UTC+10, Tom Keffer wrote:
>
> I agree: stacks and stacks of try / except statements can lead to indent 
> hell.
>
> One way to cut that down is to use functions. Each function would try / 
> except a set of related operating systems, and if none of them work, raise 
> NotImplementedError. The main function would then just have to catch 
> NotImplementedError. It will cut down the bulk.
>
> -tk
>

Reply via email to