Ответ 1
run('screen -d -m yes; sleep 1')
работает.
Не уверен, что для этого поведения виноваты ткань или экран.
Я пытаюсь выполнить script на удаленном хосте, используя сеанс отдельного экрана. Я опробовал пример Fabric дает и, к сожалению, не смог заставить его работать.
from fabric.api import run
def yes():
run('screen -d -m "yes"')
Выполнение fab yes
на моем локальном компьютере правильно соединяет его с удаленным хостом и говорит, что команда была запущена, однако ничего не выполняется на удаленном хосте. Попытка screen -d -m "yes"
на любой машине работает как ожидалось.
Если кто-нибудь может указать, что я делаю неправильно, я бы очень признателен. Кроме того, на стороне примечания, почему в команде есть цитаты вокруг да? Будет ли работать без кавычек? Спасибо!
run('screen -d -m yes; sleep 1')
работает.
Не уверен, что для этого поведения виноваты ткань или экран.
Хотя ответ 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')