По поводу твоего второго вопроса: listener - это почти наверняка поток выполнения. И я подозреваю, что этот поток отмечен как daemon - т.е. фоновый поток. Он работает независимо от главного потока, который выполняет тело программы. Главный поток запускает listener, и переходит на input(). Когда input() вернёт управление, главный поток дойдёт до конца программы и завершится.
Когда в программе на питоне остаются только фоновые потоки, она завершается.
Так что если тебе нужно, чтобы программа просто ждала, while True: time.sleep(1.0)
в помощь. Этот цикл прервать будет сложно.