11

我正在尝试使用分离的屏幕会话在远程主机上执行脚本。我尝试了Fabric 给出的示例,但不幸的是无法让它工作。

from fabric.api import run

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

在我的本地机器上执行fab yes正确地将它连接到远程主机并说命令已经运行,但是在远程主机上没有执行任何操作。尝试screen -d -m "yes"在任何一台机器上都按预期工作。

如果有人能指出我做错了什么,我将不胜感激。另外,顺便说一句,为什么命令中的 yes 周围有引号?没有引号它会工作吗?谢谢!

4

3 回答 3

17

run('screen -d -m yes; sleep 1')作品。

不过,不确定织物或屏幕是否应归咎于这种行为。

于 2013-01-22T13:57:32.407 回答
4

虽然 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')

于 2013-07-25T16:40:57.127 回答
0

像这样使用它:

run('sudo screen -d -m python app.py && sleep 1', pty=True) 

screen -d -m 

启动以断开模式启动的会话

于 2019-12-07T14:27:27.030 回答