我正在将subprocess.check_output命令用于两个不同的命令,在一种情况下,我得到了一个子进程。调用进程错误,在另一种情况下不是,但程序崩溃。gpio482 文件夹不存在,set 方法返回错误,get 方法崩溃
获取捕获异常的方法:
try:
subprocess.check_output("echo 0 > /sys/class/gpio/gpio482/value", shell=True)
except subprocess.CalledProcessError:
log("set state failed.")
return "not-writable"
获取崩溃的方法:
try:
state_string = subprocess.check_output("cat /sys/class/gpio/gpio482/value", shell=True)
except subprocess.CalledProcessError:
log("Get state failed.")
return "integer", "0" # unknown
我做错了什么吗?!
如果我在 shell 中运行公共资源,我会收到相同的错误消息:
>>> subprocess.check_output("cat /sys/class/gpio/gpio482/value", shell=True)
cat: can't open '/sys/class/gpio/gpio482/value': No such file or directory
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 573, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'cat /sys/class/gpio/gpio482/value'
returned non-zero exit status 1
>>>
>>>
>>> subprocess.check_output("echo 0 > /sys/class/gpio/gpio482/value",
shell=True)
/bin/sh: /sys/class/gpio/gpio482/value: No such file or directory
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 573, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'echo 0 >
/sys/class/gpio/gpio482/value' returned non-zero exit status 1
这两个函数如下所示。set函数工作正常,我捕获了异常,但在get函数中我崩溃了。
def get_uid_light_state():
log("get_uid_light_state")
try:
state_string = subprocess.check_output("cat /sys/class/gpio/gpio482/value", shell=True)
except subprocess.CalledProcessError:
log("Get state failed.")
return "integer", "0"
if state_string == "1n":
return "integer", "2"
elif state_string == "0n":
return "integer", "1"
def set_uid_light_state(snmptype, state):
if snmptype != "integer":
return "wrong-type"
if state == "1":
cmd_set_state = "echo 0 > /sys/class/gpio/gpio482/value"
elif state == "2":
cmd_set_state = "echo 1 > /sys/class/gpio/gpio482/value"
else:
log("Invalid value for set uid light state")
return "wrong-value"
try:
subprocess.check_output(cmd_set_state, shell=True)
except subprocess.CalledProcessError:
log("Set state failed.")
return "not-writable"
return "DONE"