从python中捕获返回值

时间:2016-05-13 10:31:58

标签: python shell

我有一个shell脚本TestNode.sh。此脚本包含以下内容:

port_up=$(python TestPorts.py)
python TestRPMs.py

现在,我想捕获这些脚本返回的值。

TestPorts.py

def CheckPorts():
    if PortWorking(8080):
        print "8080 working"
        return "8080"
    elif PortWorking(9090):
        print "9090 working"
        return "9090"

但是当我查看可用的答案时,它们并不适合我。 print正在推动变量port_up中的值,但我希望控制台上的print应该print,变量port_up应该从返回中获取值声明。有没有办法实现这个目标?

注意:我不想使用sys.exit()。没有这个可以实现同样的目标吗?

2 个答案:

答案 0 :(得分:2)

  

但我希望打印应该在控制台上打印,变量port_up应该从return语句中获取值。

然后不要捕获输出。而是做:

python TestPorts.py
port_up=$? # return value of the last statement
python TestRPMs.py

你可以这样做:

def CheckPorts():
    if PortWorking(8080):
        sys.stderr.write("8080 working")
    print 8080

但是我不太乐意打印"输出"至stderr

或者,您可以跳过打印" 8080工作" python脚本中的消息,并从shell脚本中打印出来。

def CheckPorts():
    if PortWorking(8080):
        return "8080"

port_up=$(python TestPorts.py)
echo "$port_up working"
python TestRPMs.py

答案 1 :(得分:0)

要从Python脚本返回退出代码,您可以使用sys.exit(); exit() 可能也有效。在Bash(和类似的)shell中,可以在$?中找到上一个命令的退出代码。

但是,Linux shell退出代码是8位无符号整数,即在this answer中提到的0-255范围内。所以你的策略不会起作用。

也许你可以打印" 8080工作"到stderr或logfile并打印" 8080" stdout,以便您可以使用$()捕获它。