如何在bash脚本中导入python文件? (在我的bash脚本中使用python值)

时间:2014-07-16 11:31:19

标签: python linux bash shell

我想知道在bash脚本中是否可以包含python脚本以便在(在bash脚本中)编写我在python程序中编写的函数的返回值?

例如: 我的文件" file.py"有一个函数返回一个变量值" my_value" (代表文件的名称,但无论如何) 我想创建一个bash脚本,它必须能够执行一个命令行,例如"摄取my_value"

所以你知道如何在bash脚本中包含python文件(import ...?),如何从bash脚本中的python文件中调用一个值?

提前谢谢。

更新

实际上,我的python文件看起来像这样:

class formEvents():
    def __init__(self):
        ...
    def myFunc1(self): # function which returns the name of a file that the user choose in his computeur
    ...
    return name_file        

    def myFunc2(self): # function which calls an existing bash script (bash_file.sh) in writing the name_file inside it (in the middle of a line)
        subprocess.call(['./bash_file.sh'])

if__name__="__main__":
    FE=formEvents()

我不知道它是否足够清楚,但这是我的问题:它能够在bash_file.sh中写入name_file

Jordane

3 个答案:

答案 0 :(得分:4)

最简单的方法是通过标准UNIX Pipeline和您的Shell。

以下是一个例子:

<强> foo.sh:

#!/bin/bash

my_value=$(python file.py)
echo $my_value

<强> file.py:

#!/usr/bin/env python

def my_function():
    return "my_value"

if __name__ == "__main__":
    print(my_function())

这种方式很简单:

  1. 您启动foo.sh
  2. Bash产生一个子流程并运行python file.py
  3. Python(file.py 的解释)运行函数my_function并将其返回值打印为“标准输出”
  4. Bash在my_value
  5. 中捕获Python进程的“标准输出”
  6. Bash然后简单地将存储在my_value中的值也回显到“标准输出”,您应该看到“my_value”打印到Shell / Terminal。

答案 1 :(得分:0)

如果python脚本将返回值输出到控制台,您应该能够执行此操作

my_value=$(command)

编辑:该死的,打败我吧

答案 2 :(得分:0)

或者,您可以创建bash脚本进程参数。

#!/usr/bin/bash

if [[ -n "$1" ]]; then
     name_file="$1"
else
    echo "No filename specified" >&2
    exit 1
fi
# And use $name_file in your script

在Python中,应相应地更改子进程调用:

subprocess.call(['./bash_file.sh', name_file])