2014-07-04 24 views
0

我想執行各種命令並顯示/處理他們的輸出到Django模板。例如:如何在django中使用python庫?

  • 我想ping主機(或IP)並查看它是否處於活動狀態/已打開。然後在HTML頁面上顯示「ONLINE」
  • 我想執行一個whois到一個域,抓住所有者的國家,並將其顯示在頁面上
  • 我想執行nslookup或nmap並從輸出中解析幾件事

我正在尋找的所有東西都是一個想法。我卡在我的import subprocess裏面views.py,不知道如何繼續下去。我應該如何繼續?

+1

確實很難分辨問題出在哪裏。如果你想使用一個庫,你可以導入它並使用它,就像任何代碼一樣。你的困惑在哪裏? –

回答

1

從Django視圖ping通的linux主機:

import subprocess 

def view(request): 
    try: 
     subprocess.check_call(['ping', '-c', '1', "1.2.3.4"]) 
    except subprocess.CalledProcessError: 
     host_online = False 
    else: 
     host_online = True 

    return render(request, "template.html", {'online': host_online,}) 

這將運行命令ping -c 1 1.2.3.4這將嘗試一次只ping主機。如果成功,ping將返回代碼0,如果不成功則返回1。 subprocess.check_call(...)將1或0轉換爲異常或無異常(分別)。

該解決方案將導致頁面加載在ping過程中被阻止,如果主機實際上處於關閉狀態,則該過程將持續幾秒鐘。如果這是一個問題,請考慮將ping放入通過AJAX從頁面請求的視圖中,一旦它加載完畢。

您可以爲其他命令做類似的事情。

+0

「CalledProcessError」怎麼樣?我收到一條錯誤消息。 – Radolino

+0

請不要發佈未經測試的代碼。你錯過了'CalledProcessError'的輸入,IP地址後面的一個右括號']','host_online'總是'False',... –

+0

對不起,實際上沒有試過這個代碼,我*認爲*我的編輯將解決你的問題。如果不是,我會在不使用手機時正確嘗試! –