Поскольку поток STDOUT по умолчанию блокируется блоком (когда он не идет на терминал) с помощью python, вам нужно сделать поток небуферизованным (или буферизированным по строке).
python обеспечивает способ для того, чтобы потоки были небуферизированы, вот путинский путь:
python -u foo.py
Итак, вся ваша командная строка становится:
python -u foo.py | ~/timestamp.sh >> ~/logs/foo.log
Из man python:
[ f3]Теперь я знаю ваш скрипт, но внутри скрипта вы можете очистить определенный поток с помощью модуля sys:
sys.stdout.flush()