2

Matlab から外部プログラムを実行しようとしています:

cmdstr = sprintf('"%s\\myEXECUTABLE" "%s" -options',fullEXEpath, fullInputFilePath);
[status, res] = system(cmdstr);

「status = 1」、「res」の部分的なプログラム出力 (エラー メッセージはありません)、および出力ファイルがありません。

しかし、 & (アンパサンド) を使用してまったく同じコマンドを実行します。

cmdstr = sprintf('"%s\\myEXECUTABLE" "%s" -options &',fullEXEpath, fullInputFilePath);
[status, res] = system(cmdstr);

dosコマンドウィンドウを介したバックグラウンドでの意味は、問題なく機能します(ステータスは0に等しく、出力ファイルが作成されます)。

ウイルス対策が Matlab 経由でプログラムの実行をブロックしている可能性があることをどこかで見たことがありますが、私はエンドポイント ユーザーであるため、それを無効にすることはできません。

&」を使用すると、GUI がコマンド ウィンドウを開いてバックグラウンドで実行され、Matlab コードがすぐに再開されます。

コマンド ウィンドウを開くことはできますが、MATLAB コードで出力ファイルを使用するため、Matlab をすぐに再開することはできません。

外部プログラムが終了したことを確認する方法はありますか? 私は簡単に試しました:

while (status)  %waiting for system to return status = 0
    disp 'waiting...';
end

しかし、まだ完了前に「status = 0」で戻っているようです...

というか、& を回避する方法はありますか?

どんな答えでも大歓迎です。

4

1 に答える 1

1

デバッグ方法として、system(cmdstr,'-echo') を使用できます

エラー メッセージには行き場がないため、表示されません。(matlab は出力のみを返し、エラー ストリームが含まれていない可能性があります)

そのコマンドでGUIプログラムを呼び出しているのは正しいですか?matlabのドキュメントによると:

アンパサンド (&) 文字には特別な意味があります。コンソール プログラムの場合、これによりコンソールが開きます。この文字を省略すると、コンソール プログラムがアイコン的に実行されます。GUI プログラムの場合、この文字を追加すると、アプリケーションがバックグラウンドで実行されます。MATLAB は処理を続行します。

そのため、コンソール プログラム (ヘッドレス プログラム) では、Matlab が実行中に続行することはできません。

于 2012-11-09T19:05:26.243 に答える