Python子进程调用在写入文件时抛出错误

时间:2017-04-20 19:03:41

标签: linux python-2.7 ubuntu text-to-speech

我想用SVOX / pico2wave从Python代码编写一个wav文件。当我从终端执行此行时,文件写得很好:

/usr/bin/pico2wave -w=/tmp/tmp_say.wav "Hello world."

我已经确认pico2wave位于/usr/bin

这是我的Python代码:

from subprocess import call

call('/usr/bin/pico2wave -w=/tmp/tmp_say.wav "Hello world."')

...抛出此错误:

Traceback (most recent call last):
  File "app/app.py", line 63, in <module>
    call('/usr/bin/pico2wave -w=/tmp/tmp_say.wav "Hello world."')
  File "/usr/lib/python2.7/subprocess.py", line 168, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 390, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1024, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

1 个答案:

答案 0 :(得分:2)

来自documentation

  

通常优选提供一系列参数,因为它允许   模块,以处理任何所需的转义和引用   参数(例如,允许文件名中的空格)。如果传递一个   string,要么shell必须为True(见下文),否则字符串必须为   简单地命名要执行的程序而不指定任何程序   参数。

所以你可以试试

call(['/usr/bin/pico2wave', '-w=/tmp/tmp_say.wav', '"Hello world."'])