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)

すべて最高です。

関連情報