如何防止织物形式等待过程返回

时间:2013-06-05 07:42:07

标签: python fabric

我总是使用fabric将我的进程从本地PC部署到远程服务器。

如果我有这样的python脚本:

test.py:

import time
while True:
    print "Hello world."
    time.sleep(1)

显然,这个脚本是一个连续运行的脚本。 我将此脚本部署到远程服务器并执行我的结构脚本,如下所示:

...
sudo("python test.py")

结构将始终等待test.py返回并且不会退出。如何立即停止结构脚本并忽略test.py的返回

3 个答案:

答案 0 :(得分:3)

通常对于这种异步任务,处理Celery是首选。 This详细解释了Celery和Fabric的结合使用。

from fabric.api import hosts, env, execute,run
from celery import task

env.skip_bad_hosts = True
env.warn_only = True

@task()
def my_celery_task(testhost):
    host_string = "%s@%s" % (testhost.SSH_user_name, testhost.IP)

    @hosts(host_string)
    def my_fab_task():
        env.password = testhost.SSH_password
        run("ls")

    try:
        result = execute(my_fab_task)
        if isinstance(result.get(host_string, None), BaseException):
            raise result.get(host_string)
    except Exception as e:
        print "my_celery_task -- %s" % e.message

答案 1 :(得分:1)

sudo("python test.py 2>/dev/null >/dev/null &")

或将输出重定向到其他文件而不是/ dev / null

答案 2 :(得分:0)

此代码对我有用:

fabricObj.execute("(nohup python your_file.py > /dev/null < /dev/null &)&")

其中fabricObj是结构类(内部定义)的对象,它与结构代码相对应。