我正在编写一个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)中完成所有操作可能会更容易,而不是在一个程序中计算变量并在另一个程序中使用它们。