2011-10-01 7 views
4
명령 행에서 수도로 eSpeak를 액세스 할 수있는 방법이 있다면 궁금

: 유일한 방법 내가 할 수있는, 지금파이썬 : 서브 프로세스 순차 호출 (이 경우, eSpeak를)

laptop:~$espeak 
say this line first 
say this line second 
... 

파이썬에서 그것을 할 수는 process = subprocess.Popen(['espeak'], stdin=subprocess.PIPE)입니다 다음 중 하나

process.communicate(expression) 

또는

process.stdin.write(expression) 
process.stdin.close() 

전자 블록

나머지에 의해 프로그램이 espeak가 끝날 때까지, 바람직하지 않은 행동이 있지만, 후자는 블록하지 않고 오버랩 가능성을 허용합니다. 내 프로그램이 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() 

답변

3
당신은 표현이에 줄 바꿈이 곳 process.stdin.write (표현)를 호출 시도 할 수

끝 및 을 호출하지 마십시오. espeak를 완료 할 때까지 process.stdin.close()를 호출하십시오.

그래도 작동하지 않으면 쓰기 후에 process.stdin.flush()를 추가하십시오.

+0

'expression'의 끝에'\ n'을 두어 플러싱이 작동합니다. 감사합니다! – scarlet