Calling Python from bash: Difference between revisions
Jump to navigation
Jump to search
Line 22: | Line 22: | ||
def my_function(arg1, arg2, arg3): | def my_function(arg1, arg2, arg3): | ||
print('this is my_function(' + arg1 + ", " + arg2 + ", " + arg3 + ")") | print('this is my_function(' + arg1 + ", " + arg2 + ", " + arg3 + ")") | ||
</syntaxhighlight> | |||
the module can be called generically from a bash script as follows: | |||
<syntaxhighlight lang='bash'> | |||
#!/usr/bin/env bash | |||
function call-python() { | |||
local module_path=$1 | |||
local function_name=$2 | |||
local arg1=$3 | |||
local arg2=$4 | |||
local arg3=$5 | |||
local module_name | |||
module_name=$(basename "${module_path}" .py) | |||
(PYTHONPATH="$(dirname ${module_path})"; export PYTHONPATH; python3 <<EOF | |||
import ${module_name} | |||
${module_name}.${function_name}('${arg1}', '${arg2}', '${arg3}') | |||
EOF | |||
) | |||
} | |||
call-python ./my_module.py my_function blue red green | |||
</syntaxhighlight> | |||
The output will be: | |||
<syntaxhighlight lang='text'> | |||
this is my_function(blue, red, green) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 23:57, 15 February 2022
Internal
Overview
Inline Python Code
Use bash here-doc:
python3 <<EOF
print('blah')
EOF
Also see:
Code in External Script
External Script
External Module
Given an external module my_module.py
with the following content:
def my_function(arg1, arg2, arg3):
print('this is my_function(' + arg1 + ", " + arg2 + ", " + arg3 + ")")
the module can be called generically from a bash script as follows:
#!/usr/bin/env bash
function call-python() {
local module_path=$1
local function_name=$2
local arg1=$3
local arg2=$4
local arg3=$5
local module_name
module_name=$(basename "${module_path}" .py)
(PYTHONPATH="$(dirname ${module_path})"; export PYTHONPATH; python3 <<EOF
import ${module_name}
${module_name}.${function_name}('${arg1}', '${arg2}', '${arg3}')
EOF
)
}
call-python ./my_module.py my_function blue red green
The output will be:
this is my_function(blue, red, green)
Using the Interpreter from the a Virtual Environment
If you want to use the interpreter from a specific virtual environment instead of the interpreter found in PATH, explicitly use the path to the binary from the virtual environment directory:
$(dirname $0)/venv/bin/python ...