2016-05-13 118 views
0

我有一个shell脚本TestNode.sh。此脚本具有这样的内容:从python捕获返回值

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应该从return语句中获取值。有没有办法做到这一点?

注意:我不想使用sys.exit()。没有这个可以达到相同的目的吗?

回答

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无论是。

或者,您可以跳过在python脚本中打印“8080 working”消息并从shell脚本中打印它。

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

和:

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

这只是告诉脚本执行是否成功。 – Gauranga

+0

如果你想使用退出值(获取端口号),我没有看到另一种方式(写入文件或解析python脚本的输出等)。 –

+0

嗯,那么我不得不重新设计我的解决方案。谢谢:) – Gauranga

0

若要从Python脚本可以使用sys.exit()返回退出代码; exit()也可以也可以。在Bash(以及类似的)shell中,前面命令的退出代码可以在$?中找到。

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

也许你可以打印“8080 working”到stderr或日志文件并打印“8080”到stdout,这样你就可以用$()捕获它。