如何在Django中调用远程Fabric方法

1 投票
3 回答
1727 浏览
提问于 2025-04-17 09:54

我需要通过Django在远程机器上调用一个fabric方法。我的意思是,当用户发送一个特定的请求时,获取远程机器的主机名。就像这样:

def get_hostname(request):  
  hostname = os.system('fab remote_server hostname')  
  return hostname  

3 个回答

0

在1.3版本之后,看看 fabric.tasks.execute() 这个功能。

1

如果你的服务器上有使用fabric所需的组件,你应该可以直接导入你的fabfile,然后直接调用里面的函数。

(这只是我随便想出来的一些代码,具体情况可能会有所不同)

import fabfile as f #Your fabfile must be somewhere it can be imported


def get_hostname(request):  
  hostname = f.remote_server(hostname)
  return hostname

你也可以直接从django中导入并使用fabric。

9

为了获得更好的控制和灵活性,你应该把fabric当作一个库来使用。可以查看这个链接了解更多信息:http://docs.fabfile.org/en/1.3.3/usage/library.html

import fabric.api as fab
from fabric.network import disconnect_all
from contextlib import contextmanager

@context_manager
def ssh(settings):
    with settings:
         try:
            yield
         finally:
            disconnect_all()

def hostname(request, host='somehost', user='someuser', pw='secret'):  
    with ssh(fab.settings(host_string=host, user=user, password=pw)):
         return fab.run('hostname')

撰写回答