0

次のように、サブプロセス呼び出しを行うことにより、ループ内で一連の操作を実行する python スクリプトを作成しています。

os.system('./svm_learn -z p -t 2 trial-input model')
os.system('./svm_classify test-input model pred')
os.system('python read-svm-rank.py')
score = os.popen('python scorer.py -g gold-test -i out').readline()

シェルで個別に呼び出しを行うと、正常に動作します。しかし、スクリプト内では常に壊れます。エラーの原因を追跡したところ、出力ファイルが最後に向かって切り捨てられているようです (以前の呼び出しが完了していない状態で呼び出しが行われていると思われます)。

subprocess.Popen を試してから、 Popen オブジェクトの wait() メソッドを使用しましたが、役に立ちませんでした。スクリプトはまだ壊れています。

ここで何が起こっているのですか?

4

1 に答える 1

0

おそらく最初に、os モジュールの代わりに subprocess モジュールを使用するように少し書き直します。

次に、システム コール トレースを調べて、何が問題なのかを精査します。

うまくいけば、ファイルの末尾近くに "E" エラー コードが表示され、どのようなエラーが発生したかがわかります。

別のオプションは、サブプロセスのサブセットをコメントアウトして (n + 1 番目が n 番目の出力に大きく依存していないと仮定して)、どのサブプロセスに問題があるかを突き止めることです。その後、問題のあるスクリプトに追加のエラー レポートを追加して、スクリプトの動作を確認できます。

しかし、C っぽいシステムコールのトレースに嫌気がさしていなければ、その方が簡単かもしれません。

于 2012-04-10T22:58:50.657 に答える