#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 = ''