我有一个Python函数,fooPy()返回一些值。 (int / double或string)
我想使用此值并将其分配给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)"
答案 0 :(得分:34)
您可以在Python中打印您的值,如下所示:
print fooPy()
并在你的shell脚本中:
fooShell=$(python fooPy.py)
请确保不要在shell脚本中的=
周围留出空格。
答案 1 :(得分:11)
在Python代码中,您需要打印结果。
import sys
def fooPy():
return 10 # or whatever
if __name__ == '__main__':
sys.stdout.write("%s\n", fooPy())
然后在shell中,你可以这样做:
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
: - )答案 2 :(得分:5)
如果你想要Python sys.exit
语句中的值,它将在shell特殊变量$?
中。
$ var=$(foo.py)
$ returnval=$?
$ echo $var
Some string
$ echo returnval
10
答案 3 :(得分:3)
您应该print
fooPy
返回的值。 shell替换从stdout读取。用print fooPy()
替换程序的最后一行,然后使用您提到的第二个shell管道。它应该工作。