2012-01-10 3 views
1

Мне нужно вызвать метод ткани на удаленной машине через django. Я имею в виду, когда пользователь отправляет данный запрос, получите имя хоста удаленной машины. Что-то вроде этого:Как вызвать метод удаленной ткани в django

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

жаль, что не знаю, как правильно отформатировать его :( – Abhi

+0

Я не могу сделать редактирование, поскольку у меня недостаточно репутации, но если вы выделите текст и нажмите на кнопку с помощью скобок, это отформатирует ваш код правильно. –

+0

Трудность в создании вызова ткани (в этом случае это не вопрос Django) или в использовании Django для получения правильных параметров для него? –

ответ

8

Для большего контроля и гибкости, вы должны использовать ткань в качестве библиотеки. см: 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') 
+0

смогу ли я поймать это так? – Abhi

+0

весь выход или только выход команды? – whitmo

+0

только вывод команды i хочу знать, успешно ли выполнена команда или нет? – Abhi

1

Если сервер необходимые детали для ткани, вы должны быть в состоянии просто импортировать вы fabfile на вызов функции непосредственно.

(Это только часть кода я выдумал YMMW)

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


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

Вы также можете импортировать и использовать ткань непосредственно из Джанго

+1

«Fapfile», eh? Звучит жарко. – Jordan

+0

это, v так много – Pengman

0

Проверить fabric.tasks.execute() после версии 1.3.