No se puede hacer funcionar el ejemplo de sesión de pantalla separada de Fabric

Estoy tratando de ejecutar un script en un host remoto usando una sesión de pantalla separada. Probé el ejemplo que da Fabric y desafortunadamente no pude hacerlo funcionar.

from fabric.api import run def yes(): run('screen -d -m "yes"') 

La ejecución de fab yes en mi máquina local lo conecta correctamente al host remoto y dice que el comando se ha ejecutado, sin embargo, nada se ejecuta en el host remoto. Probar la screen -d -m "yes" en cualquiera de las máquinas funciona como se esperaba.

Si alguien pudiera señalar lo que estoy haciendo mal, lo apreciaría enormemente. Además, en una nota al margen, ¿por qué hay comillas alrededor del sí en el comando? ¿Funcionaría sin las comillas? ¡Gracias!

run('screen -d -m yes; sleep 1') funciona.

No estoy seguro si la tela o la pantalla son culpables de este comportamiento sin embargo.

Aunque la respuesta de AVB es perfecta, agregaré una pequeña sugerencia que puede ayudar a alguien como yo. Si desea ejecutar más de un comando, colóquelos en un archivo ejecutable.

Esto no funcionará:

run('screen -d -m "./ENV/bin/activate; python run.py; sleep 1"')

Así que crea un archivo run.sh:

 #!/bin/bash source ENV/bin/activate python run.py 

Y run('screen -d -m ./run.sh; sleep 1') como run('screen -d -m ./run.sh; sleep 1')