从子进程调用shell脚本中定义的函数

时间:2017-10-11 14:29:13

标签: python python-3.x shell

我有一个Python脚本(Python 3.6),旨在从shell脚本调用。这个shell脚本在调用Python脚本之前定义了一些函数。在Python代码中,我想在子进程中使用这些函数。

以下是我正在尝试做的一个例子

# Shell script
function func1() {
    echo "func1 completed"
}
python /path/to/my_script.py

Python脚本

# my_script.py
import subprocess
p = subprocess.Popen("func1",
                     stdout = subprocess.PIPE,
                     shell = True)

然而,在运行时,我收到错误:/bin/sh: func1: command not found

我已尝试使用shell = False,传递env = os.environos.system,但我得到了类似的错误。有没有办法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

您应该使用source.读取文件,然后调用函数。 Source将加载bash脚本定义的函数。 正确的方法是source my_scripts.sh && func1

编辑: 我带来了这个解决方案。

bash
#!/bin/bash
function func1() {
    echo "func1 completed"
}
function invoke_python(){
    python a.py
}
if [ -z "$@" ]; then
    invoke_python 
else
    "$@"
fi

对于python我得到了。

import subprocess
p = subprocess.Popen("./a.sh func1",
        stdout = subprocess.PIPE,
        shell = True)
p.wait()