How to execute multiline python code from a bash script?

Question:

I need to extend a shell script (bash). As I am much more familiar with python I want to do this by writing some lines of python code which depends on variables from the shell script. Adding an extra python file is not an option.

result=`python -c "import stuff; print('all $code in one very long line')"` 

is not very readable.

I would prefer to specify my python code as a multiline string and then execute it.

Asked By: cknoll

||

Answers:

Use a here-doc:

result=$(python <<EOF
import stuff
print('all $code in one very long line')
EOF
)
Answered By: Barmar

Tanks to this SO answer I found the answer myself:

#!/bin/bash

# some bash code
END_VALUE=10

PYTHON_CODE=$(cat <<END
# python code starts here
import math

for i in range($END_VALUE):
    print(i, math.sqrt(i))

# python code ends here
END
)

# use the 
res="$(python3 -c "$PYTHON_CODE")"

# continue with bash code
echo "$res"
Answered By: cknoll

This solution might be complex, but working my

one line of script can

$
$ test_var=$(python3 -c $"import yaml,sys; yaml_as_dict=(lambda :yaml.safe_load(open(f'{sys.argv[1]}','r').read()))()[sys.argv[2]][sys.argv[3]]; print(yaml_as_dict)" <argv1> <argv2> <argv3>)
$
$ echo $test_var
$ 

How can I put multiple statements in one line?

How can I write multi-line code in the Terminal use python?

How to define a bash variable from python EOF

Answered By: P_M
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.