无法使Fabric的分离屏幕会话示例正常工作

时间:2013-01-14 22:07:48

标签: python fabric

我正在尝试使用分离的屏幕会话在远程主机上执行脚本。我尝试了example Fabric gives,但遗憾的是无法让它发挥作用。

from fabric.api import run

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

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

如果有人能指出我做错了什么,我会非常感激。另外,在旁注中,为什么命令中的yes附近有引号?没有引号会有用吗?谢谢!

3 个答案:

答案 0 :(得分:16)

run('screen -d -m yes; sleep 1')有效。

不确定Fabric或屏幕是否应该归咎于此行为。

答案 1 :(得分: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')

一样使用它

答案 2 :(得分:1)

像这样使用它:

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

screen -d -m 

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