2016-10-11 2 views
-2

У меня возникли трудности с поиском решения моей проблемы в python. У меня есть функция, которая использует текст в речь, чтобы сказать данную фразу. Я хочу иметь возможность прерывать функцию в середине процесса. Например, мой компьютер говорит очень длинный абзац, и я хочу, чтобы он прекратил говорить. Как бы я это сделал. Является ли это возможным?Python - функция прерывания при выполнении

Это, как я делаю ТТС:

os.system('say -v Oliver "' + text + '"') 

С уважением

+0

Конкретный способ решить эту проблему зависит от TTS api, который вы используете. –

+0

У вас есть пример кода, который вы пытаетесь запустить? – PrestonM

+0

Я использую mac TTS, например 'say 'Hello World'' @AlexeyGuseynov –

ответ

2

Вы можете использовать исключение KeyboardInterrupt, чтобы закончить слово. Вам нужно вызвать ответ, используя Popen [function subprocess], и прикрепить идентификатор процесса, чтобы впоследствии его можно было убить, если вызвано исключение.

import signal 
import subprocess 

try: 
    # spawn process 
    proc = subprocess.Popen(["say", "-v Oliver \"{}\"".format(text)], 
      stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid) 
    # Terminal output incase you need it 
    (out, err) = proc.communicate() 
except KeyboardInterrupt: 
    # function to kill the subprocess 
    os.killpg(os.getpgid(proc.pid), signal.SIGTERM) 
    pass 
Смежные вопросы