Оператор Python IF с функцией Communicate () - PullRequest
0 голосов
/ 21 марта 2019

Я использую терминальную команду в своем коде Python с использованием подпроцессов, я пытаюсь проверить функцию connect (), чтобы проверить, что возвращает функция, и посмотреть, содержится ли что-то внутри нее.Моя функция current возвращает оба следующих значения в зависимости от результата работы пластин:

(b'No license plates found.\n', None) 
Plate Not Found

(b'plate0: 10 results\n    - SBG984\t confidence: 85.7017\n    -
SBG98\t confidence: 83.3453\n    - S8G984\t confidence: 78.3329\n    -
5BG984\t confidence: 76.6761\n    - S8G98\t confidence: 75.9766\n    -
SDG984\t confidence: 75.5532\n    - 5BG98\t confidence: 74.3198\n    -
SG984\t confidence: 73.3743\n    - SDG98\t confidence: 73.1969\n    -
BG984\t confidence: 71.7671\n', None) Plate Not Found

Код следующий:

def read_plate():
    alpr_out = alpr_subprocess().communicate()
    print(alpr_out)
    if "No license plates found." in alpr_out:
        print ("No results!")
    elif "SBG984" in alpr_out:
        print ("Found Plate")
    else:
        print("Plate Not Found")

Как вы можете сказать из этого кода, он долженпечать "Нет результатов!"но вместо этого он печатает «Plate Not Found», если функция возвращает табличку SBG984, код все равно вернет «No results!».Я предполагаю, что упускаю что-то простое и, возможно, кто-то может заметить это.

1 Ответ

2 голосов
/ 21 марта 2019

alpr_out - это кортеж: (b'No license plates found.\n', None)

Что вы хотите сделать, это проверить, что подстрока является in первым элементом кортежа, а не в самом кортеже:

def read_plate():
    alpr_out = alpr_subprocess().communicate()
    print(alpr_out)
    # Index first element with [0]
    if "No license plates found." in alpr_out[0].decode():
        print ("No results!")
    elif "SBG984" in alpr_out[0].decode():
        print ("Found Plate")
    else:
        print("Plate Not Found")
...