2012-01-10 50 views
1

我需要通過django調用遠程機器上的結構方法。我的意思是當用戶發送給定的請求時,獲取遠程機器的主機名。 事情是這樣的:如何在django中調用遠程結構方法

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

對不起不知道如何將其格式化正確:( – Abhi 2012-01-10 06:00:36

+0

我不能編輯,因爲我沒有足夠的聲譽,但如果突出顯示文本,然後單擊上括號內的按鈕,將格式化代碼正確。 – 2012-01-10 06:03:58

+0

是您在做面料調用(在這種情況下,這是不是一個真正的Django的問題)的困難,或者在使用Django,以獲得正確的參數呢? – 2012-01-10 06:20:05

回答

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 2012-01-13 13:37:33

+0

所有輸出或只是命令的輸出? – whitmo 2012-01-17 22:45:17

+0

只是命令的輸出我想知道命令是否成功執行? – Abhi 2012-01-27 06:35:31

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 

您也可以導入和直接從Django的

+1

訪問您的服務器的IP地址的域名一個「fapfile」,呃?聽起來很熱。 – Jordan 2012-01-10 07:08:57

+0

是,v這麼多 – Pengman 2012-01-10 07:19:25

0

在版本1.3之後檢查fabric.tasks.execute()