我有一个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.environ
和os.system
,但我得到了类似的错误。有没有办法可以做到这一点?
答案 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()