2012-10-03 2 views
3

필자는 Python에 처음 소개되었으며 localhost (Apache Tomcat에서 호스팅)에서 실행중인 Java 웹 앱 (WAR 파일)이 실행 중인지 여부를 확인하기 위해 모니터를 작성하려고합니다.파이썬에서 wget/urllib2의 결과를 확인하는 방법은 무엇입니까?

ps -aef | grep myWebApp 

을 그리고 어떤 프로세스 ID가 다시 그 결과에 온 있는지 확인하기 위해 grep의 결과를 검사 : 나는 이전에 실행 스크립트를 고안했다.

그러나 호스트 OS는 Tomcat 프로세스 만 볼 수 있으며 Tomcat이 호스팅하는 웹 응용 프로그램은 볼 수 없습니다. 다음으로 Tomcat에 터미널에서 충돌 할 수있는 CLI가 있는지 알아 보았습니다. 대답은 '아니오'인 것처럼 보입니다.

지금, 나는 그들을 http://localhost:8080/myWebApp 충돌 필요하고 그 결과를 확인하여 내 웹 응용 프로그램이 실행되고 있는지 확인도 urllib2 어쩌면 wget를 사용하거나 생각 해요. 여기 wget 내 가장 좋은 시도입니다 : 여기에 내 생각은 웹 응용 프로그램이 실행되고 있지 않은 경우, 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() 

내 경험). (오류가 무엇인지) 여기에 무슨 일이 일어나고 있는지에 관해서는

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

이 URL을 확인하려면 :

import urllib2 

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

오류의 종류는 예외 인스턴스를 볼 수 있었다 발생했습니다 조사하기 .

+0

감사합니다. @ J.F. Sebastian - 궁극적으로, 귀하의 방법은 더 빠르고 간단 해졌으며 '상자에서 바로'작동하므로 말할 수 있습니다. 감사합니다. – 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 

* EDIT * 설치 지침 http://docs.python-requests.org/en/latest/user/install/

+0

감사 @bpgergo (+1) -이를 할 때 나는'ImportError를 얻을 : 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을 설치하는 것은 앞으로 파이썬을 사용할 계획이라면 많은 투자를 유치 할 '투자'입니다. – bpgergo

0

urllib2/요청을 사용하여 빌드하고 Tomcat의 관리자 서비스가 설치된 경우 해당 서비스와 상호 작용할 수도 있습니다. 내 사용 list method 다음과 같은 정보를받을 수 있습니다

OK - Listed applications for virtual host localhost 
    /webdav:running:0 
    /examples:running:0 
    /manager:running:0 
    /:running:0 
관련 문제