如何在Python中检查wget/urllib2的结果?

IAm*_*aja 3 python wget urllib2

我是Python的新手,我正在尝试编写一个监视器来确定运行的Java Web应用程序(WAR文件)是否正在运行localhost(由Apache Tomcat托管).我之前设计了一个运行的脚本:

ps -aef | grep myWebApp
Run Code Online (Sandbox Code Playgroud)

并检查了结果,grep以查看是否有任何进程ID返回到这些结果中.

但事实证明,主机操作系统只能看到Tomcat进程,而不是Tomcat托管的任何Web应用程序.我接下来试着看看Tomcat是否带有我可以从终端点击的任何类型的CLI,看起来答案是否定的.

现在,我正在考虑使用wget甚至可能urllib2通过让他们点击http://localhost:8080/myWebApp并检查结果来确定我的网络应用程序是否正在运行.这是我最好的尝试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()
Run Code Online (Sandbox Code Playgroud)

我的想法是,如果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
Run Code Online (Sandbox Code Playgroud)

关于这里发生了什么的任何想法(错误是什么)?而且,更重要的是,我是否采取了错误的方式?提前致谢!

bpg*_*rgo 7

我建议你试试Requests模块.它比wget或urllib更加用户友好.尝试这样的事情:

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

*编辑*安装说明http://docs.python-requests.org/en/latest/user/install/