子处理无法识别的参数,但命令在终端中有效

问题描述 投票:0回答:1

我运行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

是否有此修复程序?

python subprocess
1个回答
0
投票
>> 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相同的文件句柄中。


0
投票

我认为您可以做到:

Popen

或捕获输出。

阅读with open("path/to/result.txt", mode="wb" as fd: subprocess.run(["deepspeech", "--model", "path/to/model", "--audio", "path/to/audio"], stdout=fd) 的文档。

© www.soinside.com 2019 - 2024. All rights reserved.