Wie führe ich einen DOS-Befehl aus MATLAB aus und gebe die Steuerung sofort an MATLAB zurück (ohne ein DOS-Fenster zu erzeugen)

8

Ich möchte eine Batch-Datei in DOS von MATLAB ausführen und die Kontrolle sofort an MATLAB zurückgeben. Ich möchte dies jedoch tun, ohne ein DOS-Fenster zu öffnen (oder zumindest das Dos-Fenster am Ende verschwinden zu lassen).

Wenn ich meinen Befehl so formatiere ...

%Vor%

dann führt MATLAB die Batch-Datei aus, ohne ein Dos-Fenster zu öffnen, aber der MATLAB-Code muss auf die Rückgabe warten.

Wenn ich meinen Befehl so formatiere ...

%Vor%

Die Kontrolle wird sofort an MATLAB zurückgegeben, aber es zeigt auch das DOS-Fenster an, das ich nicht möchte. (Es ist auch schwierig zu erkennen, wann die Batch-Datei "fertig" ist, wenn Sie es auf diese Weise machen)

Jede Hilfe wäre willkommen.

    
demarcmj 19.01.2012, 18:01
quelle

2 Antworten

7

Verwenden Sie Matlab External Interfaces-Unterstützung, um Zugriff auf die Prozesssteuerungsfunktionen einer untergeordneten Ebene zu erhalten.

.NET Version

Verwenden Sie die .NET System.Diagnostics.Process-Klasse. Damit können Sie einen Prozess asynchron ausführen, nach dem Exit suchen und den Exit-Code sammeln. Und Sie können optional sein Fenster ausblenden oder es zum Debuggen sichtbar lassen.

Sie können .NET-Klassen direkt aus M-Code aufrufen.

%Vor%

Java Version

Die .NET-Version benötigt ein Matlab, das neu genug ist, um .NET-Unterstützung zu haben. Hier ist eine Java-basierte Version für ältere Matlabs, wie OP es ausstellt. Sollte auch auf Nicht-Windows-Systemen mit ein wenig Modifikation funktionieren.

%Vor%

Sie müssen möglicherweise mit der E / A in der Java-Version herumhantieren, um zu vermeiden, den gestarteten Prozess anzuhalten; demarcmj merkt an, dass Sie den Eingabestrom des Prozesses für stdout lesen und leeren müssen, um zu vermeiden, dass er sich füllt.

    
Andrew Janke 19.01.2012, 19:35
quelle
3

Verwenden Sie das Cmdlet start , das mit dem Windows-Befehlsinterpreter gebündelt ist.

Sie können wahrscheinlich nur system('start /MIN batchfilename.bat');

verwenden

Fügen Sie einen exit -Befehl am Ende der Batch-Datei ein, um sicherzustellen, dass Sie keine (minimierte) Eingabeaufforderung erhalten.

    
Ben Voigt 19.01.2012 18:42
quelle

Tags und Links