python 실행 셸 명령으로 되돌아오는 값을 가져올 수 없는 문제 해결

문제 배경:python을 이용하여 서버에서supervisor 상태 정보를 얻었을 때 되돌아오는 값을 얻지 못했습니다.
python에서 셸 명령을 실행한 후 반환할 수 있는 몇 가지 방법:

# 1.os 
ret = os.popen("supervisorctl status")
ret_data = ret.read()
# 2.subprocess 
ret = subprocess.Popen('supervisorctl status',shell=True,stdout=subprocess.PIPE)
out,err = ret.communicate()
# 3.commands 
ret_data = commands.getoutput("supervisorctl status")
# commands.getstatusoutput() 
처음에 프로그램이 사용한 것은 os였다.popen () 방법은 상호작용적인python 셸이나 IDE 환경에서 상기 방법을 사용하면 실행된 반환 값을 얻을 수 있지만, 스크립트를 사용하여 실행할 때 반환 값이 비어 있음을 발견하고command로 수정합니다.getoutput () 방법, "sh:supervisorctl:command not found"로 되돌아오는 값을 가져옵니다.
이로써 알 수 있듯이 명령을 실행할 때supervisorctl 명령을 식별할 수 없지만 시스템에supervisor가 설치되어 있기 때문에 whichsupervisorctl로 supervisorctl 경로를 보고 경로를 가진 방식으로 명령어'/usr/local/bin/supervisorctlstatus'를 실행하여 반환값을 얻는 데 성공했습니다.
요약:
python은 셸 명령을 사용하여 비시스템 자체 도구를 조작할 때 도구 경로를 가져오는 것이 좋습니다.
보충 지식:python은 호출 시스템 명령의 실행 여부를 어떻게 판단합니까
먼저 시스템 명령을 호출하는 방법을 알아야 합니다.

>>> os.system('ls')
anaconda-ks.cfg install.log.syslog        
install.log                      
0
>>>
>>> os.system('lss')
sh: lss: command not found
32512
>>>
\첫 번째, 우리는 육안으로 정확하게 0이 되돌아온다는 것을 식별할 수 있고, 잘못된 것은 0이 아니다
\두 번째, if를 사용하여 호출 시스템 명령 반환 값이 0인지 여부를 판단합니다. 만약 0이면 출력하지 않고, 0이면 "Without the command"를 출력합니다.
오류 -------------------------------

>>> if os.system('lss') !=0:print 'Without the command'
...
 
sh: lss: command not found
Without the command
정확하다

>>> if os.system('ls') !=0:print 'Without the command'
...
 
anaconda-ks.cfg install.log.syslog        
install.log                      
>>>
이상python이 셸 명령을 실행하여 되돌아오는 값을 얻을 수 없는 문제를 해결하는 것은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 참고해 주시고 저희를 많이 사랑해 주시기 바랍니다.

좋은 웹페이지 즐겨찾기