Fabric is a tool for "executing local or remote shell commands."  
Why would you re-implement a remote shell script line by line in a long Fabric script?  
That is, why not just write a brief Fabric script that runs a long remote shell script instead?
Also, I think the path you'd choose would depend on what you're trying to do. Some things are easier in python (write it in your fabfile), while others are easier in shell-land (take one of the shell approaches mentioned).
Either way, fabric is geared towards centralization and portability, and it doesn't really matter what's actually doing the lifting.
Why re-implement shell commands line by line in a Fabric script?