5

モジュールを介して小さな MATLAB スクリプトを Python と接続していsubprocessます。次のように:

cmd='(matlab -nosplash -nodesktop -r "optimizer;quit;")'
p = subprocess.Popen(cmd,stdin=None,stdout=None,shell=True)
#subprocess.Popen.wait(p)
#p.wait()
print "DONE?"

しかし、MATLAB が起動する前でも "DONE" が出力されています! このため、それを過ぎた私のコード全体が壊れています。

私が試してみました:

  • os.system() 呼び出しの使用 (ここから始めましたが、非推奨であることを SO で読みました)
  • とを使用p.wait()subprocess.Popen.waitます。どちらも機能しません。
  • 3 分間の手動一時停止を使用する (MATLAB が平均して終了するまでにかかる最大時間) Super Sloppy .

私は何が欠けていますか?

4

3 に答える 3

5

私にとってはうまくいきます:

import subprocess
retcode = subprocess.call(["matlab", "-nosplash", "-nodesktop", "-r", "quit;"])
print "DONE", retcode

それに応じてコマンド引数を分割し、実際に必要なオプションのみを使用し (shell=Trueたとえば、 は必要ありません)、( call) の後に実行することを直接実行する関数を使用します。つまり、呼び出して完了を待ちます。

インストールによっては ( http://www.mathworks.com/help/matlab/ref/matlabwindows.htmlを参照)、Matlab がすぐに終了するような方法で起動される場合があります。これを処理するには、引数リストに「-wait」を追加します。

于 2012-12-19T19:50:56.077 に答える
0

私のコメントに対するあなたの回答に基づいて、私が私のアプリケーションに対して行ったことであなたの質問に答えさせてください. MATLAB が終了するまでプロセスを強制的に待機させようとするのではなく (現在は明らかに機能していません)、その CSV ファイルが書き込まれるのを待ちます。重複の可能性が心配な場合は、現在の日付と時刻をファイルの末尾に追加するだけで問題は解決します。

于 2012-12-19T19:55:28.037 に答える