Uma maneira fácil é usar um pipe nomeado:
# Choosing a unique, secure name for the pipe left as an exercise
PIPE=/tmp/feed-data-to-program
# Create the named pipe
mkfifo "$PIPE"
# Start the Python program in the background
myprogram <"$PIPE" &
# Now grab an open handle to write the pipe
exec 3>"$PIPE"
# And we don't need to refer to the pipe by name anymore
rm -f "$PIPE"
# Later, the shell script does other work,...
# ...possibly in a loop?
while :; do
...
...
# Now I've got something to send to the background program
echo foo >&3
...
...
done
Seria bom evitar a necessidade de uma entrada temporária no sistema de arquivos, e eu sei que alguns shells como zsh
fornecem uma maneira de fazer isso, mas eu não sei de um modo portátil.