当前位置: 首页 > 面试题库 >

从Shell脚本调用Python函数

海鸣
2023-03-14
问题内容

我试图弄清楚如何从Shell脚本调用Python函数。

我有一个具有多个功能的Python文件,我需要在我的shell脚本中使用它们返回的值。有没有办法做到这一点。

我这样做是为了使用Python读取配置文件并在shell中获取值。还有其他更好的方法来实现这一目标。

test.py 包含:

import ConfigParser

config = ConfigParser.ConfigParser()
config.read("test.conf")

def get_foo():
    return config.get("locations", "foo")

def get_bar():
    return config.get("locations", "bar")

我需要将Python函数返回的值存储在shell变量中。


问题答案:

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

PPS :正如Pablo
Maurin提到的那样,如果可能的话,在一个解释器(Python,但也可能在Shell)中完成所有操作可能会更容易,而不是在一个程序中计算变量并在另一个程序中使用它们。



 类似资料:
  • 问题内容: 如何从python代码调用Shell脚本? 问题答案: 该子模块将帮助你。 显而易见的例子: 其中是一个简单的shell脚本,它是此运行的返回值。

  • 问题内容: 如何从外壳脚本内部执行Java方法? 问题答案: 您只能调用该方法。设计您的方法,使其调用所需的方法。 当我说 调用 方法时,您不会显式调用它。调用它是Java程序的唯一入口点。 如果您的班级看起来像: 您可以使用以下命令行在您可以找到的目录中调用from (如果您位于下面显示的结构的目录中): 如果要从其他目录(请参见下面的目录结构)执行此操作,则必须设置类路径。 为了清楚起见,请采

  • 问题内容: 我尝试谷歌搜索答案,但没有运气。 我需要使用我的超级计算机服务器,但是要运行我的python脚本,必须通过shell脚本执行。 例如我要执行 如何做到这一点? 问题答案: 只需确保python可执行文件在PATH环境变量中,然后在脚本中添加 细节: 在文件job.sh中,放入 执行此命令以使脚本可运行: 运行 :

  • 用途:使用php将命令直接输入minecraft服务器控制台 我正在尝试使用php脚本(从浏览器运行)来执行shell脚本。当我从终端运行php时,它就可以工作了!但在浏览器中,什么都不会发生。 从终端运行时,我得到一个“数组0”,但浏览器给我一个“数组1” 问题是什么?一旦我运行了shell,之后的一切不应该像在终端上一样工作吗?(shell脚本内部的内容是否重要?) shell拥有所有rx权限

  • 问题内容: 我正在尝试从python这样启动PowerShell脚本: 问题是我得到以下错误: 无法加载文件C:\ Users \ sztomi \ workspace \ myproject \ buildxml.ps1,因为在此系统上禁用了脚本的执行。请参阅“获取有关about_signing的帮助”以了解更多详细信息。 尽管事实上我很早以前确实通过键入管理员运行的PS终端来启用Powersh

  • 问题内容: 我有要从Python脚本调用的Perl脚本。我一直在寻找,并没有成功。我基本上是试图调用向Perl脚本发送1变量的方法,但是不需要Perl脚本的输出,因为它是一个自包含程序。 到目前为止,我想出的是: 只有刚刚开始的Python编程,所以我确定以上内容完全是胡说八道。任何帮助将非常感激。 问题答案: 如果您只想打开通往perl解释器的管道,那么您的方向正确。我认为您唯一缺少的是perl