从子 shell 调用 python 函数
Calling a python function from a subshell
我正在编写一个 python 程序,它在子进程中运行一些 BASH 脚本。
有人可能会说我正在使用 BASH 作为我的 python 程序的脚本语言。
有没有一种方法可以将 python 函数注入到我的 bash 脚本中,而无需从 bash 重新加载 python 代码?
strawman 示例:如果这是 Python 运行 Javascript,那么我可以将我的 Python 函数绑定到 js2py VM 并从 [=44] 中调用它们=].
我想从 bash 调用:python some_file_of_mine.py
,但这将启动一个新的 python 进程,无法访问我的 python 程序的数据。
还想到打电话:python -c $SOME_INJECTED_PYTHON_CODE
。这可以使用 Python 的 inspect.source() 将一些简单的 python 代码连同来自父进程的一些绑定数据预注入子进程 bash shell.然而,这将是非常 quote(`/") 敏感的,并且会导致 $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)
例如, 将 second 结果放入 RESULT_BAR
(类似地:-fn
用于结果 #n)。
PS2:在一个解释器中完成所有事情可能会更容易(Python,但也许 shell ), 如果可能,而不是在一个程序中计算变量并在另一个程序中使用它们。
我正在编写一个 python 程序,它在子进程中运行一些 BASH 脚本。 有人可能会说我正在使用 BASH 作为我的 python 程序的脚本语言。
有没有一种方法可以将 python 函数注入到我的 bash 脚本中,而无需从 bash 重新加载 python 代码?
strawman 示例:如果这是 Python 运行 Javascript,那么我可以将我的 Python 函数绑定到 js2py VM 并从 [=44] 中调用它们=].
我想从 bash 调用:python some_file_of_mine.py
,但这将启动一个新的 python 进程,无法访问我的 python 程序的数据。
还想到打电话:python -c $SOME_INJECTED_PYTHON_CODE
。这可以使用 Python 的 inspect.source() 将一些简单的 python 代码连同来自父进程的一些绑定数据预注入子进程 bash shell.然而,这将是非常 quote(`/") 敏感的,并且会导致 $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)
例如, 将 second 结果放入 RESULT_BAR
(类似地:-fn
用于结果 #n)。
PS2:在一个解释器中完成所有事情可能会更容易(Python,但也许 shell ), 如果可能,而不是在一个程序中计算变量并在另一个程序中使用它们。