我运行DeepSpeech命令将wav转换为文本,并希望将结果保存到文本文件中,如下所示:
deepspeech --model path/to/model --audio path/to/audio >> path/to/result.txt
它在终端中工作,但是如果我尝试像这样在Python中将其作为子进程运行,则:
subprocess.run(["deepspeech", "--model", "path/to/model", "--audio", "path/to/audio", ">>", "path/to/result.txt"])
我明白了:
usage: deepspeech [-h] --model MODEL [--lm [LM]] [--trie [TRIE]] --audio AUDIO
[--beam_width BEAM_WIDTH] [--lm_alpha LM_ALPHA]
[--lm_beta LM_BETA] [--version] [--extended] [--json]
deepspeech: error: unrecognized arguments: >> path/to/result.txt
是否有此修复程序?
>> path/to/result.txt
这不是deepspeech
的参数。这是一个称为“输出重定向”的外壳功能。 deepspeech
显然不明白这一点。
要在subprocess
中获得相同的行为,可以使用stdout
选项:
subprocess.run(["deepspeech", "--model", "path/to/model", "--audio", "path/to/audio"] , stdout=open("path/to/result.txt", 'a')])
有关更多信息,请参见Popen
类
stdin,stdout和stderr分别指定执行程序的标准输入,标准输出和标准错误文件句柄。有效值为PIPE,DEVNULL,现有文件描述符(正整数),现有文件对象和无。 PIPE指示应创建到子级的新管道。 DEVNULL表示将使用特殊文件os.devnull。使用默认设置无,将不会发生重定向。子文件的句柄将从父文件继承。另外,stderr可以是STDOUT,这表示应将来自应用程序的stderr数据捕获到与stdout相同的文件句柄中。
我认为您可以做到:
Popen
或捕获输出。
阅读with open("path/to/result.txt", mode="wb" as fd:
subprocess.run(["deepspeech", "--model", "path/to/model", "--audio", "path/to/audio"], stdout=fd)
的文档。