I am trying to execute a script on a remote host using a detached screen session. I tried out the example Fabric gives and unfortunately couldn\'t get it to work.
run('screen -d -m yes; sleep 1')
works.
Not sure if Fabric or screen are to blame for this behaviour though.
Use it like this:
run('sudo screen -d -m python app.py && sleep 1', pty=True)
screen -d -m
Start a session that starts in disconnected mode
Although AVB answer is perfect I'll add a small tip which may help someone like me. If you want to run more than one command put them to a executable file.
This will not work:
run('screen -d -m "./ENV/bin/activate; python run.py; sleep 1"')
So create a run.sh file:
#!/bin/bash
source ENV/bin/activate
python run.py
And use it like run('screen -d -m ./run.sh; sleep 1')