在 Bash 脚本中捕获 Python 脚本的输出

在 Bash 脚本中捕获 Python 脚本的输出

我有一个监控游戏服务器的脚本。它是用 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

谢谢

答案1

在末尾添加了 2>&1 现在可以正常工作

例如

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

答案2

如果您有权编辑 serverquery.py,我会更改错误条件的退出值,然后$?在运行后简单地检查值。如果没有,请尝试将输出检查的 if 条件更改为 val0x00ff: 建议的格式if [[ "${serverquery}" == "ERROR 1" ]]; then ... fi

相关内容