我有一个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()
。没有这个可以实现同样的目标吗?
答案 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,以便您可以使用$()
捕获它。