从子壳调用 python 函数



我正在编写一个python程序,该程序在子进程中运行一些BASH脚本。 有人可能会说我正在使用BASH作为我的python程序的脚本语言。

有没有办法将 python 函数注入我的 bash 脚本,而无需从 bash 重新加载 python 代码?

稻草人示例:如果这是运行Javascript的Python,那么我可以将我的Python函数绑定到js2py VM中,并从javascript中调用它们。

我想从bash调用:python some_file_of_mine.py,但这将启动一个新的python进程,无法访问我的python程序的数据。

还想到打电话:python -c $SOME_INJECTED_PYTHON_CODE。这可以使用 Python 的 inspect.source() 将一些简单的 python 代码以及来自父进程的一些绑定数据预先注入到子 bash shell 中。但是,这将非常引号('/")有意义,并且会导致$import出现一些问题。

我真正想要的是一种将父进程称为 bash 子进程并获取一些数据的简单方法(不使用 Flask + CURL 组合)

您可以通过要求 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()')

因为反引号和$(…)评估命令并将其替换为其输出。

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

ALL_RESULTS=$(python -c 'import test; print test.get_foo(), test.get_bar()')

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

RESULT_BAR=$(echo $ALL_RESULTS | cut -d' ' -f2)

例如,它采用第二个结果并将其放入RESULT_BAR(类似地:结果 #n 的-fn)。

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

相关内容

  • 没有找到相关文章

最新更新