python非零返回怎么解决_Python subprocess.CalledProcessError:返回非零退出状态2

#!/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温度的小脚本。但是当我尝试运行它时,我有一个错误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太阳4月12日23时36分33秒UTC 2015年x86_64的x86_64的x86_64的GNU/Linux的

+1

你是什么意思“他们工作很好?”退货时他们的退出代码是什么? –

+0

如果我在终端输入smartctl -A/dev/sda,这个工作完美 –

+0

如果你之后运行'echo $?',它是否打印'0'? –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Pythonsubprocess模块执行一个外部命令时,如果该命令返回非零退出状态码,会触发subprocess.CalledProcessError异常。这个异常会包含有关子进程返回状态码和错误输出的信息。 一般情况下,这个错误表示外部命令在执行时发生了错误。有几种可能的原因导致此错误: 1. 命令不存在或无法找到:如果子进程要执行的命令不存在,那么系统将返回一个非零状态码。要解决此问题,请确保指定的命令被正确安装或命令的路径是正确的。 2. 输入或参数错误:有时候外部命令可能会对输入数据或参数进行验证,如果给定的数据或参数不符合要求,子进程可能会返回一个非零状态码。在这种情况下,需要确认提供的数据和参数是正确的,并且符合外部命令的预期。 3. 权限问题:某些命令可能需要管理员权限才能执行,如果当前用户没有足够的权限运行这个命令,子进程将返回一个非零状态码。要解决此问题,请确保使用了具有足够权限的用户运行Python程序。 为了处理这个异常,可以使用try-except语句来捕获CalledProcessError异常,并在异常处理块中处理相关的错误信息。通过访问异常对象的output属性可以获取外部命令的错误输出,通过访问returncode属性可以得到子进程的返回状态码。 以下是一个处理subprocess.CalledProcessError异常的示例: ```python import subprocess try: # 执行外部命令,可能会触发异常 output = subprocess.check_output(["non_existing_command"]) except subprocess.CalledProcessError as e: # 处理异常 print("外部命令返回非零状态码:", e.returncode) print("错误输出信息:", e.output) ``` 通过适当地处理subprocess.CalledProcessError异常,我们可以增强程序的稳定性,并确保在发生子进程错误时我们能正确处理异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值