2016-05-13 110 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,這樣你就可以用$()捕獲它。