2012-10-03 32 views
3

我是Python新手,正在嘗試編寫一個監視器來確定運行在localhost(由Apache Tomcat託管)上的Java Web應用程序(WAR文件)是否正在運行。我早些時候曾設計了運行腳本:如何在Python中檢查wget/urllib2的結果?

ps -aef | grep myWebApp 

並視察了grep的結果,看是否有進程標識回來了這些結果。

但事實證明,主機操作系統只能看到Tomcat進程,而不是Tomcat託管的任何Web應用程序。我接下來試着看看Tomcat是否帶有任何可以從終端上點擊的CLI,而且看起來答案是否定的。現在

,我通過讓他們打http://localhost:8080/myWebApp並檢查結果考慮使用wget或者甚至urllib2確定我的web應用程序正在運行的。這是我與wget最好的嘗試:

wgetCmd = "wget http://localhost:8080/myWebApp" 
wgetResults = subprocess.check_output([wgetCmd], shell=True, stderr=subprocess.STDOUT) 

for line in wgetResults.strip().split('\n'): 
    if 'failed' in line: 
    print "\nError: myWebApp is not running." 
    sys.exit() 

這裏我的想法是,如果Web應用程序沒有運行,wget的輸出應始終包含單詞‘失敗’在它的內部(至少,從我的經驗)。不幸的是,當我運行這個,我得到以下錯誤:

Traceback (most recent call last): 
File "/home/myUser/mywebapp-mon.py", line 52, in <module> 
main() 
File "/home/myUser/mywebapp-mon.py", line 21, in main 
wgetResults = subprocess.check_output([wgetCmd], shell=True, stderr=subprocess.STDOUT) 
File "/usr/lib/python2.7/subprocess.py", line 544, in check_output 
raise CalledProcessError(retcode, cmd, output=output) 
subprocess.CalledProcessError: Command '['wget http://localhost:8080/myWebApp']' returned non-zero exit status 4 

任何想到這裏發生了什麼(錯誤是什麼)?另外,更重要的是,我是否以錯誤的方式去做這件事?提前致謝!

回答

1

要檢查網址:

import urllib2 

def check(url): 
    try: 
     urllib2.urlopen(url).read() 
    except EnvironmentError: 
     return False 
    else: 
     return True 

探討什麼樣的錯誤發生,你可以看看異常實例。

+0

謝謝@ J.F。塞巴斯蒂安 - 最終,你的方式更快,更簡單,而且它的工作「開箱即用」,可以這麼說。再次感謝! – IAmYourFaja

7

我建議你試試Requests模塊。它比wget或urllib更方便用戶。嘗試是這樣的:

import requests 
r = requests.get('http://localhost:8080/myWebApp') 
>>> r.status_code 
200 
>>> r.text 
Some text of your webapp 

* 編輯*安裝說明http://docs.python-requests.org/en/latest/user/install/

+0

感謝@bpgergo(+1) - 當我嘗試這個,我得到'導入錯誤:沒有requests'命名模塊...有一個模塊,我需要下載,如果是這樣,我該怎麼做,我在哪裏安裝它(這實際上是我寫的第一個Python腳本之一,但我是一個相當有經驗的Java開發人員,所以我可以摸索我的方式通過正確的推動來實現它的工作)。再次感謝! – IAmYourFaja

+0

好的,沒問題。這個模塊還沒有包含在標準的Python發行版中(儘管我相信它有一天會這樣)。所以,是的,如果你想使用它,你必須另外安裝它。我已經添加了一個指向我的答案的安裝說明鏈接。另請注意,有一個工具可以讓安裝Ptyhon模塊變得非常簡單。它被稱爲PIP。您可能需要安裝Pip,並且您將不會遇到任何進一步的模塊安裝問題。請參閱本指南瞭解如何安裝Pip。 http://www.pip-installer.org/en/latest/installing。html#using-the-installer – bpgergo

+1

對於你目前的問題,看起來似乎有點矯枉過正,但相信我,安裝Pip是一種'投資',如果你打算將來使用python,將會帶來很多好處。 – bpgergo

0

如果已安裝,您還可以使用urllib2/requests並與Tomcat的管理器服務進行交互。我使用list method您可以收到以下信息:

OK - Listed applications for virtual host localhost 
    /webdav:running:0 
    /examples:running:0 
    /manager:running:0 
    /:running:0