Мне было интересно, есть ли способ получить доступ к espeak, как вы могли бы в командной строке:
laptop:~$espeak
say this line first
say this line second
...
Прямо сейчас, единственный способ сделать это в Python - это process = subprocess.Popen(['espeak'], stdin=subprocess.PIPE )
, за которым следует либо
process.communicate(expression)
или
process.stdin.write(expression)
process.stdin.close()
Первый блокирует остальную часть программы до завершения espeak, что нежелательно, в то время как последний не блокирует, но допускает возможность наложения, например, если моя программа вызывает espeak в два раза быстрее. Мне было интересно, есть ли способ вызвать espeak, как в командной строке, где я мог бы быстро ввести несколько слов для выступления, но он сказал бы только второе после первого завершения, например.
В частности, оба приведенных выше примера отключены после одного выражения. Есть ли способ избежать этого?
Редактировать: Ответ, данный ред., Состоит в том, чтобы писать с символами новой строки в конце и затем сбрасывать
process = subprocess.Popen(['espeak'], stdin=subprocess.PIPE )
process.stdin.write("say this line first\n")
process.stdin.flush()
process.stdin.write("say this line second\n")
process.stdin.flush()
process.stdin.close()