이 질문에는 이미 답변이 있습니다.
나는 여러 리눅스 프로세스를 점검하고, 그 중 하나를 찾는 간단한 메시지를 가지고있다. 특별한 메시지 (서비스의 이름을 언급하는 측면에서 "특별한")를 기록한다.
내 질문 : 다중 조건부 함수를 가질 적절한, Pythonic 방법은 무엇입니까 부울 반환합니다.과문자열 (인쇄 된 메시지 용)?
다음은 현재 솔루션의 필 다운 버전입니다 (튜플 사용).
import subprocess
import time
def _isProcessRunning(cmd):
return int(
subprocess.check_output(
'{} | grep -v grep | wc -l'.format(cmd),
shell=True
)
) > 0
def processGroupFound():
if _isProcessRunning('ps auwxx | grep duplicity'):
return (True, 'Duplicity')
elif _isProcessRunning('who | grep pts'):
return (True, 'SSH')
elif _isProcessRunning('netstat -na | grep ESTA | grep 5901'):
return (True, 'VNC')
else:
return (False, '')
def worker():
while True:
process_found, service_string = processGroupFound()
if process_found:
print('{} found; skipping'.format(service_string))
else:
print('Continuing on')
time.sleep(10)
if __name__ == "__main__":
worker()
이 방법은 제대로 작동하지만 걱정하지 마라. (특히 스타일 론적으로, 그러나이 간단한 샘플에서 잘못된 로직을 수집한다면, 거기에 대해 아무 말없이 자유롭게 의견을 말하면 도움이된다.
파이썬에서 빈 문자열은 "거짓"이므로 반환하는 것이 다소 불필요합니다 (거짓, ''). 대신이 작업을 수행 할 수 있습니다.
def processGroupFound():
if _isProcessRunning('ps auwxx | grep duplicity'):
return 'Duplicity'
elif _isProcessRunning('who | grep pts'):
return 'SSH'
elif _isProcessRunning('netstat -na | grep ESTA | grep 5901'):
return 'VNC'
else:
return ''
def worker():
while True:
service_string = processGroupFound()
if service_string:
print('{} found; skipping'.format(service_string))
else:
print('Continuing on')
time.sleep(10)
(만나다4.1 진실 가치 시험)
나는 이것이 파이썬이라고 생각한다. (그러나 그것은 나일지도 모른다.)
class NoRunningService(RuntimeError): pass
def findService():
if _isProcessRunning('ps auwxx | grep duplicity'):
return 'Duplicity'
elif _isProcessRunning('who | grep pts'):
return 'SSH'
elif _isProcessRunning('netstat -na | grep ESTA | grep 5901'):
return 'VNC'
else:
raise NoRunningService
def worker():
while True:
try:
service_string = findService()
except NoRunningService:
print('Continuing on')
else:
print('{} found; skipping'.format(service_string))
time.sleep(10)
return True, 'Duplicity'
), 그러나 다시는 어떤 경우에는 그렇지 않을 수도 있습니다. - Mad Physicistreturn
진술,하지만 그렇지 않으면, 괜찮아 보인다. 나는 항상 의심 스럽다.shell=True
, 파이썬이 할 수있는 것들을 외부 유틸리티를 사용하여grep
과wc
작업),하지만 당신이 묻는 것과는 별개입니다. - ShadowRanger