2010-01-22 114 views
12

我有一個Python函數fooPy(),它返回一些值。 (int/double或string)使用Python的函數返回值將值分配給shell變量

我想使用這個值並將它賦值給shell腳本。例如下面是Python的功能:

def fooPy(): 
    return "some string" 
    #return 10 .. alternatively, it can be an int 

fooPy() 

在shell腳本我嘗試下面的東西,但他們沒有工作。

fooShell = python fooPy.py 
#fooShell = $(python fooPy.py) 
#fooShell = echo "$(python fooPy.py)" 

回答

32

您可以打印在Python你的價值,像這樣:

print fooPy() 

,並在你的shell腳本:

fooShell=$(python fooPy.py) 

請務必不要離開=周圍的空間在外殼腳本。

+1

謝謝,工作!我把空格放在=上也犯了一個錯誤。所以修正了這一點。 – cppb 2010-01-22 07:40:18

+0

+1提及「確保在shell腳本中不要在空格周圍留空格」它會讓我失去了像新手這樣的地獄。 – 2010-08-17 13:23:22

10

在你的Python代碼中,你需要打印結果。

import sys 
def fooPy(): 
    return 10 # or whatever 

if __name__ == '__main__': 
    sys.stdout.write("%s\n", fooPy()) 

然後在外殼,你可以這樣做:

fooShell=$(python fooPy.py) # note no space around the '=' 

注意,我在Python代碼添加了if __name__ == '__main__'檢查,以確保當你的程序是從運行印刷只是做命令行,而不是從Python解釋器導入它時。

我也用sys.stdout.write()代替print,因爲

  • print在 「真正的節目」 有在Python 2和Python 3,
  • 不同的行爲,應該使用sys.stdout.write()代替print反正:-)
+0

+ 1有關sys.stdout.write()的詳細答案和註釋它很有用。謝謝! – cppb 2010-01-22 07:41:03

+0

輝煌。確切地說,我正在尋找 – 2017-10-18 09:27:37

3

你應該printfooPy返回的值。 shell替換從stdout中讀取。用print fooPy()替換程序的最後一行,然後使用您提到的第二個shell管道。它應該工作。

5

如果您想要Python sys.exit語句中的值,它將位於shell特殊變量$?中。

$ var=$(foo.py) 
$ returnval=$? 
$ echo $var 
Some string 
$ echo returnval 
10 
+0

+1來指示獲取終止代碼的方式......但讓我修復一個小細節。 – fortran 2010-01-22 07:50:36

+0

感謝您的解決(這是多種語言工作的危險)。 – 2010-01-22 10:36:12

+0

嗯..這使得「打印return_val」呼叫不必要(尚未嘗試)。謝謝,這是有用的信息。 +1。 – cppb 2010-01-23 04:54:29

相關問題