从shell脚本调用Python函数

18 python bash shell configuration-files

我试图弄清楚如何从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")
Run Code Online (Sandbox Code Playgroud)

我需要将Python函数返回的值存储在shell变量中.

Eri*_*got 31

您可以通过要求Python解释器打印结果,将函数的结果发送到标准输出:

python -c 'import test; print test.get_foo()'
Run Code Online (Sandbox Code Playgroud)

-c选项只是要求Python执行一些Python命令.

为了将结果存储在变量中,您可以这样做:

RESULT_FOO=`python -c 'import test; print test.get_foo()'`
Run Code Online (Sandbox Code Playgroud)

或者,等效地

RESULT=$(python -c 'import test; print test.get_foo()')
Run Code Online (Sandbox Code Playgroud)

从反引号和$(…)评估命令并用它的输出替换它.

PS:获取每个函数的结果需要每次都使用这种方法解析配置文件.这可以通过一次性返回所有结果来优化,例如:

ALL_RESULTS=$(python -c 'import test; print test.get_foo(), test.get_bar()')
Run Code Online (Sandbox Code Playgroud)

然后可以将结果拆分并放入不同的变量中

RESULT_BAR=$(echo $ALL_RESULTS | cut -d' ' -f2)
Run Code Online (Sandbox Code Playgroud)

它取第二个结果并将其放入RESULT_BAR(例如:-fn对于结果#n).

PPS:正如Pablo Maurin所说,如果可能的话,在单个解释器(Python,但也可能是shell)中完成所有操作可能更容易,而不是在一个程序中计算变量并在另一个程序中使用它们.

  • 如果模块是python3,则需要使用打印功能。例如。`python3 -c '导入测试;打印(test.get_foo())'` (2认同)