通过Python函数返回值为Shell变量赋值

12 投票
4 回答
24043 浏览
提问于 2025-04-15 18:20

我有一个Python函数,叫做fooPy(),它会返回一些值,可以是整数、浮点数或者字符串。

我想在一个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)"

4 个回答

5

如果你想获取Python中sys.exit语句的返回值,可以在命令行中查看一个特殊的变量$?

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

在你的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 :-)
34

你可以在Python中这样打印你的值:

print fooPy()

在你的shell脚本中可以这样做:

fooShell=$(python fooPy.py)

记得在shell脚本中的=两边不要留空格哦。

撰写回答