gpt4 book ai didi

Python 子进程.CalledProcessError : returned non-zero exit status 2

转载 作者:IT王子 更新时间:2023-10-29 00:51:08 29 4
gpt4 key购买 nike

#!/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()

这是使用 smartmontools 和 lm-sensors 在 Python 中监控温度的小脚本。但是当我尝试运行它时出现错误

subprocess.CalledProcessError: Command '['smartctl', '-A', '/dev/sda2']' returned non-zero exit status 2

但是当我在终端中手动尝试这个命令时,它们工作得很好。

一些信息:

uname -a 
Linux LME 4.0.0-040000-generic #201504121935 SMP Sun Apr 12 23:36:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

最佳答案

如果被调用进程返回任何非零退出代码,将引发 CalledProcessError。在命令行上,您应该 echo $? 获取最后的返回代码并查看它是否真的返回 2。我怀疑它会。

如果这在您的 Python 代码中没问题,您可以排除 CalledProcessError 并从其属性中获取任何信息,尤其是 output 属性。 (在 python docs 中查找此错误以获取更多信息。)

例子:

import subprocess
output = None
try:
output = subprocess.check_output(["smartctl", "-A", "/dev/sda2"])
except subprocess.CalledProcessError as e:
output = e.output

关于Python 子进程.CalledProcessError : returned non-zero exit status 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29824461/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com