Не удается получить пример сеанса экранного экрана Fabric для работы

Я пытаюсь выполнить script на удаленном хосте, используя сеанс отдельного экрана. Я опробовал пример Fabric дает и, к сожалению, не смог заставить его работать.

from fabric.api import run

def yes():
    run('screen -d -m "yes"')

Выполнение fab yes на моем локальном компьютере правильно соединяет его с удаленным хостом и говорит, что команда была запущена, однако ничего не выполняется на удаленном хосте. Попытка screen -d -m "yes" на любой машине работает как ожидалось.

Если кто-нибудь может указать, что я делаю неправильно, я бы очень признателен. Кроме того, на стороне примечания, почему в команде есть цитаты вокруг да? Будет ли работать без кавычек? Спасибо!

Ответ 1

run('screen -d -m yes; sleep 1') работает.

Не уверен, что для этого поведения виноваты ткань или экран.

Ответ 2

Хотя ответ AVB идеален, я добавлю небольшой совет, который может помочь кому-то вроде меня. Если вы хотите запустить более одной команды, поместите их в исполняемый файл.

Это не сработает:

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

Итак, создайте файл run.sh:

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

И используйте его как run('screen -d -m ./run.sh; sleep 1')