ЕСЛИ выражение содержит неожиданное число — можно ли сократить код

#python

#python

Вопрос:

Интересно, можно ли это упростить:

 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 текстового значения?
Спасибо за помощь!

Комментарии:

1. Это правильный способ сделать это, в чем проблема?

2. Более Pythonic было бы if 'CONNECTED' in response:

Ответ №1:

Вы можете использовать регулярное выражение.

 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)
 

Ответ №2:

Попробуйте это:

 wifi = [x for x in ["CONNECTED","PENDING","READY","NA",""] if x in response][0]
 

Обратите внимание, что он расширяет ваш код с:

 else:
    wifi = ''