2010-01-22 164 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