首页 > 解决方案 > IF 表达式包含意外的数字 - 可以缩短代码

问题描述

想知道这是否可以简化:

sp = subprocess.Popen(['lipc-get-prop', 'com.lab126.wifid', 'cmState'], stdout=subprocess.PIPE)
response, _ = sp.communicate()
if  response.find("CONNECTED") > -1:
    wifi = 'CONNECTED'
elif response.find("PENDING") > -1:
    wifi = 'PENDING'
elif response.find("READY") > -1:
    wifi = 'READY'
elif response.find("NA") > -1:
    wifi = 'NA'

我更喜欢 wifi = response 之类的东西。打印响应给出了预期的文本,但在 IF 语句中使用它,值是数字,给出了字符串中文本的起始位置。是否有单行版本来为 wifi 分配文本值?谢谢您的帮助!

标签: python

解决方案


您可以使用正则表达式。

import re

match = re.search(r'CONNECTED|PENDING|READY|NA', response)
if match:
    wifi = match.group(0)

这不是单行的,因为您需要检查是否找到了任何单词。如果您知道它将包含其中之一,您可以使用:

wifi = re.search(r'CONNECTED|PENDING|READY|NA', response).group(0)

推荐阅读