通过Python函数返回值为Shell变量赋值
我有一个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脚本中的=
两边不要留空格哦。