When I run my python script (content irrelevant for this question, just uses print a couple of times) interactively, it sends the output straight away.
When I use it in a pipe to tee or in an output redirection (./script.py > script.log) there is no output. What am I doing wrong?
I suspect you're encountering output buffering, where it's waiting to get a certain number of bytes before it flushes.  You can look at the unbuffer command if that is undesirable for you.
Python only sends output interactvely