Python String Literal Внутри команды Popen - PullRequest
1 голос
/ 01 апреля 2012

Я пытаюсь передать строковый литерал в команду Popen, но она не работает:

subprocess.Popen(['/usr/bin/festival', '-b', '(SayText "%s")']) % text

Идея состоит в том, что я хочу передать текст в команду Popen, которая вызываетПрограммный фестиваль, который будет читать входной текст.

Можно ли передать строковый литерал внутри команды popen?Я предполагаю, что это не работает, потому что команды Popen находятся в списке.

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

Вы правы, отформатируйте элемент списка, а не результат Popen или список аргументов:

festivalCmd = '(SayText "%s")' % text.replace('"', '')
subprocess.Popen(['/usr/bin/festival', '-b', festivalCmd])

Вызов replace гарантирует, что вы правильно обрабатываете вводы типа foo"bar без сбоев.

0 голосов
/ 25 июля 2013

Ваш синтаксис неправильный. Я не знаю много о фестивальной системе синтезатора речи, но если бы вы написали это так, это была бы работа:

subprocess.Popen(['/usr/bin/festival', '-b', '(SayText "%s")' % text]) 
...