セットアップは次のとおりです:私はKaldiツールを使って作業しています。それらはある形式のbashスクリプトで呼び出されます。これらのbashスクリプトは、タスクをSun Grid Engineに送信するPythonで記述されたラッパープログラムによって呼び出されます。PythonとKaldi:壊れたパイプエラー
私は実行するコマンドは、次のよう
feat-to-dim 'ark:copy-feats scp:train.scp ark:- |' -
は、コマンドラインでこれを実行している私が包む場合、
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
しかし警告と一緒に正しい結果「40」を生み出しますこれは次のようになります。
python -c "import os; os.system(\"feat-to-dim 'ark:copy-feats scp:train.scp ark:- |' -\")"
プログラムcopy-feats
faエラーとILS:様々なスタックトレースと、次のエラーの後
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
です。したがって、try/catch、またはtrapping the pipeのようなものは、この場合には成功しないようです。
また、次の行は、警告やエラーなしで完全に正常に動作:
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 |' -\")"
をあなたが持っていますそれ以上の提案はありますか?
実際には、13は 'feat-to-dim '箱の戻り状態です:copy-feats scp:train.scp ark: - |'コマンドラインで実行されます。答え(フィーチャディメンション)は40にする必要があります。ありがとうございます。それは動作しますが、デフォルトですべてのエラーを無視することは私が望むものではないので、セットアップに統合するのは難しいです。何とかこの壊れたパイプエラーをキャッチすることも可能ですか? - 私がbashコードでそれを処理できるのが最善でしょう。 – Green
いいえ、13はフィーチャ次元です。 copy-featsの代わりにadd-deltasを使うと、39が表示されます。 –
'copy-feats'の代わりに' add-deltas'を使うと、120と戻りステータス13が再び発生します。 – Green