设置如下:我正在使用 Kaldi 工具。它们在某种形式的 bash 脚本中被调用。这些 bash 脚本由用 python 编写的包装程序调用,该程序将任务提交给 Sun Grid Engine。
我要执行的命令如下
feat-to-dim 'ark:copy-feats scp:train.scp ark:- |' -
在命令行中执行此操作会产生正确的结果“40”以及警告
WARNING (feat-to-dim[5.0.23-f7b2f]:Close():kaldi-io.cc:501) Pipe copy-feats scp:train.scp ark:- | had nonzero return status 13
但是,如果我用以下方式包装它:
python -c "import os; os.system(\"feat-to-dim 'ark:copy-feats scp:train.scp ark:- |' -\")"
程序copy-feats
因错误而失败:
ERROR (copy-feats[5.0.23-f7b2f]:Write():kaldi-matrix.cc:1240) Failed to write matrix to stream
在各种堆栈跟踪和以下错误之后,还会额外打印以下警告:
WARNING (feat-to-dim[5.0.23-f7b2f]:Close():kaldi-io.cc:501) Pipe copy-feats scp:train.scp ark:- | had nonzero return status 134
这就是我发现的:feat-to-dim
提前关闭管道,同时copy-feats
尝试继续写入输出。既然不可能,copy-feats
就终止。13
可能表示断管错误。
对于 Python,这是一个严重的问题,为什么它会变成错误并终止。但在这种情况下,产生此错误的不是 Python,而是copy-feats
. 因此,在这种情况下,python 中的try/catch或捕获管道之类的东西似乎没有任何成功。
此外,以下几行运行良好,没有任何警告或错误:
python -c "import os; os.system(\"copy-feats scp:train.scp ark:-\")" > cp
python -c "import os; os.system(\"feat-to-dim ark:cp -\")"
以下行产生简单的错误消息cat: write error: Broken pipe
和退出状态 256:
python -c "import os; os.system(\"feat-to-dim ark:'cat cp |' -\")"
您在这里有什么进一步的建议吗?