在Raspberry Pi上使用Python获取系统正常运行时间

在Raspberry Pi上使用Python获取系统正常运行时间,python,uptime,Python,Uptime,这个问题是指: 如果我在覆盆子上使用该程序,我会得到错误的时间: ~ $ uname -a Linux raspberry 5.4.72-v7+ #1356 SMP Thu Oct 22 13:56:54 BST 2020 armv7l GNU/Linux pi@raspberry:~ $ uptime 15:14:33 up 20 min, 3 users, load average: 0,00, 0,08, 0,09 但结果是: 20 0 1 # days, hours, min

这个问题是指:

如果我在覆盆子上使用该程序,我会得到错误的时间:

~ $ uname -a
Linux raspberry 5.4.72-v7+ #1356 SMP Thu Oct 22 13:56:54 BST 2020 armv7l GNU/Linux


pi@raspberry:~ $ uptime
15:14:33 up 20 min,  3 users,  load average: 0,00, 0,08, 0,09
但结果是:

20 0 1 # days, hours, minutes
我正在使用:

import subprocess 
def uptime1(): # liefert Zeit in s
    raw = subprocess.check_output('uptime').decode("utf8").replace(',', '')
    days = int(raw.split()[2])
    if 'min' in raw:
        hours = 0
        minutes = int(raw[4])
    else:
        hours, minutes = map(int,raw.split()[4].split(':'))
    print(days, hours, minutes)    
    totalsecs = ((days * 24 + hours) * 60 + minutes) * 60
    return totalsecs

zeit=uptime1()

如何解决这个问题?

尝试将时区设置为适合您的:

import os
os.environ['TZ']="America/New_York"
time.tzset()
如本文所述。
子进程正在从Python上下文启动进程,这可能与您的系统不同。

尝试为您设置正确的时区:

import os
os.environ['TZ']="America/New_York"
time.tzset()
如本文所述。
子进程正在从Python上下文启动一个进程,这可能与您的系统不同。

我认为您解析正常运行时间结果的逻辑需要工作。如果你想坚持你的方式,你应该打印出你从输出中提取的每个子字符串,看看你是否拥有你认为你拥有的。我认为您会发现需要对代码进行大量调整。为了让您开始了解这一点,以下是拆分输出的结果:

['15:14:33', 'up', '20', 'min,', '3', 'users,', 'load', 'average:', '0,00,', '0,08,', '0,09']
您正在使用此拆分中的
[2]
[4]
,即分钟数和用户数,但您似乎希望第一个给您几天,第二个给您几分钟

作为另一种方式的建议,下面的代码将简单地从字符串中提取所有数字,这将为您提供一个计算输出中所有数据的起点:

import re

output = '15:14:33 up 20 min,  3 users,  load average: 0,00, 0,08, 0,09'

exp = re.compile(r"(\d+)")

i = 0
r = []

while True:
    m = exp.search(output, i)
    if not m:
        break
    r.append(int(m.group(1)))
    i = m.end(1)

print(r)
结果:

[15, 14, 33, 20, 3, 0, 0, 0, 8, 0, 9]

因此,从这里开始,您只需执行
r[3]
r[5]
等操作即可获得所有数字。这只是解析输出的一种方法。

我认为解析正常运行时间结果的逻辑需要工作。如果你想坚持你的方式,你应该打印出你从输出中提取的每个子字符串,看看你是否拥有你认为你拥有的。我认为您会发现需要对代码进行大量调整。为了让您开始了解这一点,以下是拆分输出的结果:

['15:14:33', 'up', '20', 'min,', '3', 'users,', 'load', 'average:', '0,00,', '0,08,', '0,09']
您正在使用此拆分中的
[2]
[4]
,即分钟数和用户数,但您似乎希望第一个给您几天,第二个给您几分钟

作为另一种方式的建议,下面的代码将简单地从字符串中提取所有数字,这将为您提供一个计算输出中所有数据的起点:

import re

output = '15:14:33 up 20 min,  3 users,  load average: 0,00, 0,08, 0,09'

exp = re.compile(r"(\d+)")

i = 0
r = []

while True:
    m = exp.search(output, i)
    if not m:
        break
    r.append(int(m.group(1)))
    i = m.end(1)

print(r)
结果:

[15, 14, 33, 20, 3, 0, 0, 0, 8, 0, 9]

因此,从这里开始,您只需执行
r[3]
r[5]
等操作即可获得所有数字。这只是解析输出的一种方法。

导入os.environ['TZ']=“America/New_York”time.tzset()

我有一个错误:

~ $ python3 /home/pi/melder_status.py 
Traceback (most recent call last):
  File "/home/pi/melder_status.py", line 11, in <module>
    time.tzset()
NameError: name 'time' is not defined
~$python3/home/pi/melder\u status.py
回溯(最近一次呼叫最后一次):
文件“/home/pi/melder_status.py”,第11行,在
time.tzset()
NameError:未定义名称“时间”

导入os os.environ['TZ']=“美国/纽约”时间.tzset()

我有一个错误:

~ $ python3 /home/pi/melder_status.py 
Traceback (most recent call last):
  File "/home/pi/melder_status.py", line 11, in <module>
    time.tzset()
NameError: name 'time' is not defined
~$python3/home/pi/melder\u status.py
回溯(最近一次呼叫最后一次):
文件“/home/pi/melder_status.py”,第11行,在
time.tzset()
NameError:未定义名称“时间”

我找到了另一个解决方案:

谢谢你的想法。
打印(输出)

我找到了另一种解决方案:

谢谢你的想法。
打印(输出)

您希望输出什么?您希望输出什么?