This commit is contained in:
olli 2024-06-26 11:10:27 +02:00
parent 05475361e8
commit 1e5e310fc8
3 changed files with 92 additions and 60 deletions

View File

@ -34,7 +34,7 @@ g_tmp="$g_tmp/g_$g_scriptname-$$"
# START and EXIT Notification # START and EXIT Notification
g_trap_exit="g_logger EXITING $g_scriptname ; rm -r $g_tmp ; g_kill_all_background_jobs >/dev/null 2>&1" g_trap_exit="g_logger EXITING $g_scriptname ; rm -r $g_tmp ; g_kill_all_background_jobs >/dev/null 2>&1"
trap "$g_trap_exit" EXIT trap "$g_trap_exit" INT TERM EXIT
g_syslogtag="g_bash-script:$g_scriptname[$$]" g_syslogtag="g_bash-script:$g_scriptname[$$]"
[ $g_scriptname = "bash" ] || g_logger STARTING $g_scriptname [ $g_scriptname = "bash" ] || g_logger STARTING $g_scriptname

View File

@ -5,8 +5,11 @@ function g_calc {
unset g_calc_result unset g_calc_result
local g_jobs
mapfile -t g_jobs < <(jobs -r)
# check if bc is already running # check if bc is already running
if [[ -z "$g_fd_bc_in" || -z "$g_fd_bc_out" ]] if [[ -z "$g_fd_bc_in" || -z "$g_fd_bc_out" || ${g_jobs[*]} != *bc* ]]
then then
local bc_input="$g_tmp/$$-g_bc_input" local bc_input="$g_tmp/$$-g_bc_input"
local bc_output="$g_tmp/$$-g_bc_output" local bc_output="$g_tmp/$$-g_bc_output"

View File

@ -1,65 +1,94 @@
function g_python { function g_python_test {
# function for running python in the background
# $g_fd_python_in $g_fd_python_out have to be global
local g_python_tmp=${g_tmp}/$$
g_python_out=${g_python_tmp}/python-out
local g_python_in=${g_python_tmp}/python-in
local g_python_error=${g_python_tmp}/python-error
local g_python_jobs
mapfile -t g_python_jobs < <(jobs -r)
unset g_python_result unset g_python_result
# Use python in backround for multiple python commands running much faster local g_jobs
#if [ -z "${g_python_running}" ] mapfile -t g_jobs < <(jobs -r)
if [[ ${g_python_jobs[*]} != *python-pipeexec.py* ]] # check if python is already running
if [[ -z $g_fd_python_in || -z $g_fd_python_out || ${g_jobs[*]} != *python3* ]]
then then
mkdir -p ${g_python_tmp} local python_input="$g_tmp/$$-g_python_input"
if [ -s ${g_python_error} ] local python_output="$g_tmp/$$-g_python_output"
then # create fifo pipe
g_echo_error "From last python run: $(cat ${g_python_error})" [ -p "$python_input" ] || mkfifo "$python_input"
[ -p "$python_output" ] || mkfifo "$python_output"
# run bc in background und switch i/o to pipes
python3 -iu < "$python_input" > "$python_output" 2>/dev/null &
# store in filedescriptiors
exec {g_fd_python_in}> "$python_input"
exec {g_fd_python_out}< "$python_output"
fi fi
[ -p ${g_python_in} ] || mkfifo ${g_python_in} # send calculation and read result
echo "while 1: echo "$@
exec(open(\"${g_python_in}\").read()) print('')" >&${g_fd_python_in}
print('DONE') read -u ${g_fd_python_out} g_python_result
" >${g_python_tmp}/python-pipeexec.py
# python stream channel
{ python3 -u ${g_python_tmp}/python-pipeexec.py >>${g_python_out} 2>>${g_python_error} & }
g_python_running="true"
fi
# do python
>${g_python_out}
>${g_python_error}
echo $@ >${g_python_in}
while true
do
# Check for output
if [ -s ${g_python_out} ]
then
mapfile -t g_python_result <${g_python_out}
if [[ ${g_python_result[-1]} == DONE ]]
then
# remove the DONE output (last array element
unset g_python_result[-1]
break
fi
fi
# Check for error
mapfile -t g_python_jobs < <(jobs -r)
if [ -s "${g_python_error}" ] || [[ ${g_python_jobs[*]} != *python-pipeexec.py* ]]
then
g_echo_error "Python Progress not running:
$(cat ${g_python_error})"
return 1
fi
# sleep a short time
sleep 0.1
done
} }
#function g_python {
#
# local g_python_tmp=${g_tmp}/$$
# g_python_out=${g_python_tmp}/python-out
# local g_python_in=${g_python_tmp}/python-in
# local g_python_error=${g_python_tmp}/python-error
# local g_python_jobs
# mapfile -t g_python_jobs < <(jobs -r)
# unset g_python_result
#
# # Use python in backround for multiple python commands running much faster
# #if [ -z "${g_python_running}" ]
# if [[ ${g_python_jobs[*]} != *python-pipeexec.py* ]]
# then
# mkdir -p ${g_python_tmp}
# if [ -s ${g_python_error} ]
# then
# g_echo_error "From last python run: $(cat ${g_python_error})"
# fi
# [ -p ${g_python_in} ] || mkfifo ${g_python_in}
# echo "while 1:
# exec(open(\"${g_python_in}\").read())
# print('DONE')
#" >${g_python_tmp}/python-pipeexec.py
#
# # python stream channel
# { python3 -u ${g_python_tmp}/python-pipeexec.py >>${g_python_out} 2>>${g_python_error} & }
# g_python_running="true"
# fi
#
# # do python
# >${g_python_out}
# >${g_python_error}
# echo $@ >${g_python_in}
#
# while true
# do
#
# # Check for output
# if [ -s ${g_python_out} ]
# then
# mapfile -t g_python_result <${g_python_out}
# if [[ ${g_python_result[-1]} == DONE ]]
# then
# # remove the DONE output (last array element
# unset g_python_result[-1]
# break
# fi
# fi
#
# # Check for error
# mapfile -t g_python_jobs < <(jobs -r)
# if [ -s "${g_python_error}" ] || [[ ${g_python_jobs[*]} != *python-pipeexec.py* ]]
# then
# g_echo_error "Python Progress not running:
#$(cat ${g_python_error})"
# return 1
# fi
#
# # sleep a short time
# sleep 0.1
# done
#
#}