¿Cómo puedo hacer que la pitón espere hasta que termine de hablar?

Estoy escribiendo un programa para reconocer el discurso desde un micrófono y el código se procesará en consecuencia. El código que escribí para este propósito está abajo.

import speech_recognition as sr
import webbrowser
import pyttsx
from time import sleep

engine = pyttsx.init()
engine.setProperty('rate', 70)
r = sr.Recognizer()

def recognize(audio):
    try:
        return r.recognize(audio)
    except LookupError, e:
        print e
    return ''
with sr.Microphone() as source:
    while True:
        engine.say("Hi How can i help you ?")
        sleep(0.15)
        print "Start Speaking"
        audio = r.listen(source)
        words = recognize(audio)
        print("You said " + words)
        if words == "Facebook":
            engine.say("Shall i open the Facebook page for you ?")
            engine.runAndWait()
            audio = r.listen(source)
            words = recognize(audio)
            if words == "Yes":
                webbrowser.open('https://www.facebook.com')
        elif words == "stop":
            break

Aquí intenté dormir también pero antes de que el motor hable puedo ver el textoComienza a hablar imprimiéndose En lugar de dormir, ¿hay alguna forma agradable de capturar el discurso en el micrófono y esperar a decir algo o un largo silencio?

Respuestas a la pregunta(1)

Su respuesta a la pregunta