首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从子subshell调用python函数

从子subshell调用python函数
EN

Stack Overflow用户
提问于 2021-07-12 06:41:48
回答 1查看 128关注 0票数 1

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

有没有一种方法可以将python函数注入到bash脚本中,而不必从bash重新加载python代码?

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

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

还想打个电话:python -c $SOME_INJECTED_PYTHON_CODE。这可以使用python的inspect.source()预注入一些简单的python代码以及来自父进程的一些绑定数据到子bash中。然而,这将是非常敏感的(‘/“)引用,并将导致一些问题的$import。

我真正想要的是一种简单的方法,可以将父进程称为bash子进程,并获得一些数据(除了使用烧瓶+卷发组合)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 06:58:14

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

代码语言:javascript
复制
python -c 'import test; print test.get_foo()'

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

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

代码语言:javascript
复制
RESULT_FOO=`python -c 'import test; print test.get_foo()'`

或者,相当于

代码语言:javascript
复制
RESULT=$(python -c 'import test; print test.get_foo()')

因为backticks和$(…)计算了一个命令并将其替换为它的输出。

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

代码语言:javascript
复制
ALL_RESULTS=$(python -c 'import test; print test.get_foo(), test.get_bar()')

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

代码语言:javascript
复制
RESULT_BAR=$(echo $ALL_RESULTS | cut -d' ' -f2)

它以第二个结果为例,并将其放入RESULT_BAR (类似地:-fn表示结果#n)。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68342921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档