web-dev-qa-db-ja.com

Pythonスクリプトの出力をbashスクリプトでキャプチャする

ゲームサーバーを監視するスクリプトがあります。 bashで書かれています。ただし、サーバーがロックされているかどうかを確認するために、高度なモニターをまとめようとしています。これには、サーバーにクエリを実行するための小さなpythonスクリプトが必要であり、OK、ERROR 1、またはERROR 2のいずれかが返されます。出力をキャプチャする最良の方法は何ですか?現在、スクリプトでは変数は空です。スクリプトが正常に実行され、メッセージが返されていることを確認できます。

if [ -f serverquery.py ];then
    echo -e "[\e[0;36m INFO\e[0;39m ] Running advanced monitoring serverquery.py"
    echo -e "$( date '+%b %d %H:%M:%S') ${servicename}: Running advanced monitoring serverquery.py" >> ${logfile}
    serverquery=`./serverquery.py 127.0.0.1 27015`
    if [ "${serverquery}" = "ERROR 1" ];then
        echo -e "[\e[0;31m FAIL\e[0;39m ] ${servicename}: serverquery.py Monitor detected ${servername} has crashed!"
        echo -e "$( date '+%b %d %H:%M:%S') ${servicename}: serverquery.py Monitor detected ${servername} has crashed!" >> ${logfile}
        fn_restartserver
    Elif [ "${serverquery}" = "ERROR 2" ];then
        echo -e "[\e[0;31m FAIL\e[0;39m ] ${servicename}: serverquery.py Monitor detected ${servername} has crashed!"
        echo -e "$( date '+%b %d %H:%M:%S') ${servicename}: serverquery.py Monitor detected ${servername} has crashed!" >> ${logfile}
        fn_restartserver
    fi
fi

ありがとうございました

2
dgibbs

最後に2>&1を追加し、現在機能しています

例えば

serverquery=$(./serverquery.py 127.0.0.1 27015 2>&1)

3
dgibbs

Serverquery.pyを編集するためのアクセス権がある場合は、エラー条件の終了値を変更し、実行後に$?の値を確認するだけです。そうでない場合は、出力チェックのif条件をval0x00ff:if [[ "${serverquery}" == "ERROR 1" ]]; then ... fiで提案されている形式に変更してみてください。

1
John