【问题标题】:get system uptime with Python on a Raspberry Pi在 Raspberry Pi 上使用 Python 获得系统正常运行时间
【发布时间】:2020-10-31 16:42:57
【问题描述】:

这个问题是指: uptime with Python

如果我在树莓上使用程序,我会弄错时间:

~ $ 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()

如何解决?

【问题讨论】:

  • 你期待什么输出?

标签: python uptime


【解决方案1】:

我认为您解析uptime 结果的逻辑需要工作。如果你想坚持自己的方式,你应该打印出你从输出中提取的每个子字符串,看看你是否拥有你认为你拥有的东西。我想你会发现你需要对你的代码进行相当多的调整。为了让您开始,以下是拆分输出的结果:

['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] 等即可获得所有数字。这只是您解析输出的一种方式。

【讨论】:

    【解决方案2】:

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

    import os
    os.environ['TZ']="America/New_York"
    time.tzset()
    

    如此处所述Launching python within python and timezone issue。 Subprosess 正在从 Python 上下文启动一个进程,这可能与您的系统不同。

    【讨论】:

      【解决方案3】:

      import os 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
      

      【讨论】:

        【解决方案4】:

        我找到了另一个解决方案:https://www.raspberrypi.org/forums/viewtopic.php?t=164276

        #!/usr/bin/python3
        
        import shlex, subprocess
        cmd = "uptime -p"
        args = shlex.split(cmd)
        p = subprocess.Popen(args, stdout=subprocess.PIPE)
        output = p.communicate()
        

        感谢您发布的想法。 打印(输出)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-25
          • 2016-07-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多