2017-10-18 13 views
0

두 개의 다른 명령에 대해 subprocess.check_output 명령을 사용하고 한 경우에 subprocess.CalledProcessError가 있고 다른 경우에는 프로그램이 충돌합니다. gpio482 폴더가 존재하지 않습니다 및 설정 방법은 오류를 반환하고 get 메소드가 예외를 잡는다파이썬 하위 프로세스 예외

Get 메소드 충돌 :

try: 
    subprocess.check_output("echo 0 > /sys/class/gpio/gpio482/value", shell=True) 
except subprocess.CalledProcessError: 
    log("set state failed.") 
    return "not-writable" 

Get 메소드 충돌 :

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 

이 있습니까를 내가 잘못한 어떤 점?!

>>> 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 
+0

어떤 오류 메시지가 나타 났습니까? –

+0

쉘에서 두 줄을 모두 시도하면 동일한 오류 메시지가 나타납니다. – fresh

+0

케이스를 재현 할 수 없습니다. 프로그램이'CalledProcessError'를 처리하고 있는지 확인하십시오. –

답변

0

양쪽 기능은 다음과 같습니다 : I 쉘에서 commonds을 실행하면

나는 같은 오류 메시지를 받았습니다. 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 == "1\n": 
    return "integer", "2" 
elif state_string == "0\n": 
    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"