python - 从子shell调用python函数
问题描述
我正在编写一个 python 程序,它在子进程中运行一些 BASH 脚本。有人可能会说我使用 BASH 作为我的 python 程序的脚本语言。
有没有办法将 python 函数注入到我的 bash 脚本中,而无需从 bash 重新加载 python 代码?
稻草人示例:如果这是运行 Javascript 的 Python,那么我可以将我的 Python 函数绑定到 js2py VM 并从 javascript 中调用它们。
我想调用: python some_file_of_mine.py
from bash ,但这将启动一个新的 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
例如(类似地:-fn
对于结果#n)。
PS2:如果可能的话,在一个解释器(Python,但也可能是 shell)中做所有事情可能会更容易,而不是在一个程序中计算变量并在另一个程序中使用它们。
推荐阅读
- python - Tkinter Text-Widget ,滚动到特定行以使其成为第一个可见行
- angular - Angular 8 从 GET API 调用中打印出 JSON 元素
- html - 为什么评论在 HTML 中的标签内不起作用
- python - spark sql中需要一次传递多个sql查询
- perl - 使用 Net::OpenSSH 将文件从远程机器传输到本地机器
- php - 多次调用该文件时延长php中的超时时间
- sql - 用于从表中获取先前和新列详细信息的 SQL 查询
- python - 如何递归总结python中嵌套树字典的叶子节点?
- django - 前端或后端 Django 上的表单验证
- django - 操作错误在 Django 3.0 中没有这样的列