从Shell脚本调用Python函数
我想知道怎么在一个 shell 脚本里调用一个 Python 函数。
我有一个 Python 文件,里面有多个函数,我需要在我的 shell 脚本中使用这些函数返回的值。有没有什么方法可以做到这一点?
我这样做是为了用 Python 读取一个配置文件,然后在 shell 中获取这些值。有没有其他更好的方法可以实现这个?
test.py
文件里包含:
import ConfigParser
config = ConfigParser.ConfigParser()
config.read("test.conf")
def get_foo():
return config.get("locations", "foo")
def get_bar():
return config.get("locations", "bar")
我需要把 Python 函数返回的值存储到一个 shell 变量里。
1 个回答
43
你可以通过让Python解释器打印结果,把你函数的结果发送到标准输出。
python -c 'import test; print test.get_foo()'
-c
这个选项就是让Python执行一些Python命令。
如果你想把结果存到一个变量里,你可以这样做:
RESULT_FOO=`python -c 'import test; print test.get_foo()'`
或者,你也可以这样做
RESULT=$(python -c 'import test; print test.get_foo()')
因为反引号和$(…)
会执行一个命令,并把它的输出替换掉。
补充说明: 使用这种方法,每次获取函数的结果都需要解析配置文件,这样效率不高。可以通过一次性返回所有结果来优化,比如:
ALL_RESULTS=$(python -c 'import test; print test.get_foo(), test.get_bar()')
然后可以用下面的方式把结果分开,放到不同的变量里:
RESULT_BAR=$(echo $ALL_RESULTS | cut -d' ' -f2)
这会把第二个结果放到RESULT_BAR
里,比如(同样的:-fn
可以用来获取第n个结果)。
再补充一下: 正如Pablo Maurin提到的,如果可能的话,最好在一个单独的解释器里完成所有操作(比如Python,或者也可以是shell),而不是在一个程序里计算变量,然后在另一个程序里使用它们。