我想知道是否有办法在命令行中访问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,我可以快速输入多个要说的内容,但它只会说第一个完成后的第二件事,例如。
特别是,上述两个例子都在单个表达式后关闭了espeak。有没有办法避免这种情况?
编辑:由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()
答案 0 :(得分:3)
您可以尝试调用process.stdin.write(expression),其中expression在结尾处有换行符,而不调用process.stdin.close(),直到您完成espeak
如果不起作用,则在写入后添加process.stdin.flush()调用。