将bash值传递给Python

时间:2017-06-06 14:48:25

标签: python bash

我正在运行以下bash脚本以在崩溃时重新启动我的Perforce服务器,但我想要做的就是让bash脚本运行Python脚本以发送带有应用程序退出代码的webhook到我的Slack频道。

Python脚本允许您执行类似python app.py 225的操作,但它可以正常工作,但我想要做的是将$?传递到该脚本中,例如python app.py $?

每当服务重新启动时,echo行都会正确报告退出代码(在终端中显示225),但是当传入Python脚本时$?显示为0。

#!/bin/bash

until ~/Desktop/shell/p4d; do
    echo "Perforce Server crashed with exit code $?.  Respawning.." >&2
    sleep 1
    python ~/Desktop/shell/app.py $?
done

获取参数的Python脚本片段:

if __name__ == "__main__":
    error = str(sys.argv[1])
    print error
    post_message(error)

我该怎么做?

1 个答案:

答案 0 :(得分:2)

$?的行为类似于变量。在每次调用程序(例如p4d,sleep,python)之后,该命令的返回值由bash存储在$?中。

在您的情况下,当您“回显”它时,$?包含p4d的返回值。然后你调用“sleep”,这实际上是一个程序“/ bin / sleep”,所以#!/bin/bash until ~/Desktop/shell/p4d; do P4D_RETURN=$? echo "Perforce Server crashed with exit code $?. Respawning.." >&2 sleep 1 python ~/Desktop/shell/app.py $P4D_RETURN done 的值被sleep的返回代码替换为0。 因此,python脚本也会被调用“0”。

要解决您的问题,您可以将返回代码缓存在本地变量中,如下所示:

if($("#coemp_pret1").val() == "1"){
    $(this).val(function(index, value) {
        var tempValue = $(this).val($(this).val() + $("#QuotDecAdh_s3p1").val());

        if( tempValue < "100" ){            
            return value
                .replace(/\d{1,2}(?!\d)|100/, "");

            $(this).val(100 - $("#QuotDecAdh_s3p1").val());
        }
    });
}