Python 为什么“in”操作符失败

Python 为什么“in”操作符失败,python,python-3.x,Python,Python 3.x,我正在尝试编写一个函数来检查web服务器是否启动。 我运行一个wget命令,然后在字符串中检查结果是否为200 OK。我正在使用in运算符,但它一直失败,我不确定我做错了什么 我已经在下面发布了我的代码 谢谢你的阅读 导入子流程 网址=reddit.com wget=subprocess.Popen[wget,-spider,网址],stdout=subprocess.PIPE 输出,err=wget.communicate 响应=输出。解码“utf-8” 如果响应为“200 OK”: 打印出来

我正在尝试编写一个函数来检查web服务器是否启动。 我运行一个wget命令,然后在字符串中检查结果是否为200 OK。我正在使用in运算符,但它一直失败,我不确定我做错了什么

我已经在下面发布了我的代码

谢谢你的阅读

导入子流程 网址=reddit.com wget=subprocess.Popen[wget,-spider,网址],stdout=subprocess.PIPE 输出,err=wget.communicate 响应=输出。解码“utf-8” 如果响应为“200 OK”: 打印出来 其他: 打印下来 编辑:subprocess.getoutput解决了我的问题。

wget将所有消息记录到stderr,您可以使用stderr=subprocess.PIPE捕获stderr输出,然后检查err,或者使用stderr=subprocess.stdout将stderr重定向到stdout并继续使用输出,例如:

或者使用check_输出调用:

或者使用subprocess.run@Boris:


它怎么会失败?您期望的结果是什么?您应该使用库来发出web请求,而不是wget。@AChampion我期望它的up会被打印出来,但是它的down会一直被打印出来。尝试将printreprresponse放在if语句之前,看看它到底是什么。可能的重复,因为这是python 3,您应该使用subprocess.run而不是check_output您应该执行subprocess.run…,text=True,capture_output=True.stderr
In []:
wget = subprocess.Popen(["wget", "--spider", web_address], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output, err = wget.communicate()
'200 OK' in output.decode('utf-8')

Out[]:
True
In []:
output = subprocess.check_output(["wget", "--spider", web_address], stderr=subprocess.STDOUT, encoding='utf-8')
'200 OK' in output

Out[]:
True
In []:
output = subprocess.run(["wget", "--spider", web_address], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True).stdout
'200 OK' in output

Out[]:
True