#!/usr/bin/env python
# encoding: utf-8
import re
import subprocess
import time
import json
def get_temperatures(disks):
sensors = subprocess.check_output(["sensors"])
temperatures = {match[0]: float(match[1]) for match in re.findall("^(.*?)\:\s+\+?(.*?)°C",
sensors, re.MULTILINE)}
for disk in disks:
output = subprocess.check_output(["smartctl", "-A", disk])
temperatures[disk] = int(re.search("Temperature.*\s(\d+)\s*(?:\([\d\s]*\)|)$",
output, re.MULTILINE).group(1))
return temperatures
def main():
while True:
print json.dumps(get_temperatures(("/dev/sda2", "/dev/sdb1")))
time.sleep(20)
if __name__ == '__main__':
main()
Это небольшой скрипт для мониторинга температуры в Python с использованием smartmontools и lm-датчиков. Но когда я пытаюсь запустить его, у меня есть ошибка.Python subprocess.CalledProcessError: возвращает ненулевой статус выхода 2
subprocess.CalledProcessError: Command '['smartctl', '-A', '/dev/sda2']' returned non-zero exit status 2
Но когда я пробую эту команду вручную в терминале, они отлично работают.
Некоторая информация:
uname -a
Linux LME 4.0.0-040000-родовое # 201504121935 SMP ВС 12 апреля 23:36:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Что значит «они отлично работают?» Каков их код выхода, когда они возвращаются? –
Если я набираю smartctl -A/dev/sda в терминале, эта работа отлично –
И если вы запустите 'echo $?' Сразу после этого, это напечатает '0'? –