Я использую eSpeak в Ubuntu, и у меня есть скрипт на Python 2.7, который печатает и передает сообщение:
import subprocess text = 'Hello World.' print text subprocess.call(['espeak', text])
eSpeak выдает нужные звуки, но загромождает оболочку некоторыми ошибками (ALSA lib ..., нет подключения к сокету), поэтому я не могу легко прочитать то, что было напечатано ранее. Код выхода равен 0.
К сожалению, нет документированной опции отключить его детализацию, поэтому я ищу способ только визуально отключить его и сохранить открытую оболочку чистой для дальнейшего взаимодействия.
Как я могу это сделать?
Переведено автоматически
Ответ 1
Для python >= 3.3 перенаправьте выходные данные в DEVNULL:
try: from subprocess import DEVNULL # py3k except ImportError: import os DEVNULL = open(os.devnull, 'wb')
text = u"René Descartes" p = Popen(['espeak', '-b', '1'], stdin=PIPE, stdout=DEVNULL, stderr=STDOUT) p.communicate(text.encode('utf-8')) assert p.returncode == 0# use appropriate for your program error handling here
Ответ 3
Используйте subprocess.check_output (новое в python 2.7). Это подавит стандартный вывод и вызовет исключение, если команда завершится неудачно. (На самом деле он возвращает содержимое стандартного вывода, так что вы можете использовать его позже в своей программе, если хотите.) Пример:
import subprocess try: subprocess.check_output(['espeak', text]) except subprocess.CalledProcessError: # Do something