4

コマンドラインのように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が終了するまでプログラムの残りの部分をブロックしますが、望ましい動作ではありませんが、後者はブロックしませんが、プログラムの呼び出しが2回速すぎる場合など、重複する可能性があります。コマンドラインのようにespeakを呼び出す方法があるのではないかと思っていました。この方法では、話す複数のことをすばやく入力できますが、たとえば、最初の話が完了してから2番目のことしか言いません。

特に、上記の両方の例は、単一の式の後にシャットダウンします。これを回避する方法はありますか?

編集:ed。によって与えられた答えは、最後に改行を入れて書き、それからフラッシュすることです

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()
4

1 に答える 1

3

式の最後に改行があるprocess.stdin.write(expression)を呼び出してみて、espeakが完了するまでprocess.stdin.close()を呼び出さないでください

それが機能しない場合は、書き込み後にprocess.stdin.flush()呼び出しを追加します。

于 2011-10-01T07:41:43.683 に答える