cron을 통해 실행할 때 subprocess.Popen stdout 가져오기

cron을 통해 실행할 때 subprocess.Popen stdout 가져오기

서비스 상태를 확인하고 싶은데, 서비스가 시작되지 않은 경우 이메일(stdout)로 상태를 보내주세요.
이 스크립트는 매시간 cron에 의해 실행되도록 예약되어 있습니다.
수동으로 실행하면 다음이 제대로 작동합니다.

def is_service_running(name):
with open(os.devnull, 'wb') as hide_output:
    proc = subprocess.Popen(['service', name, 'status'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
        output = proc.stdout.read()
        exit_code = proc.wait()
        return exit_code == 0, output

그러나 cron을 통해 실행할 때. output비었다. cron이 실행 중일 때 캡처하는 방법은 무엇입니까
? stdout감사해요

답변1

문제는 cron이 아니라 입니다 shell=True.
분명히 사용 시 shell=Truepopen은 목록이 아닌 단일 문자열을 기대합니다.
그래서 호출을 다음과 같이 업데이트하면:

proc = subprocess.Popen(['service ' + name + ' status'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

모두 제일 좋다.

관련 정보