2011-01-06 2 views
11

Ich versuche, MATLAB-Skripts über die Befehlszeile ausführen und habe Probleme mit MATLAB, um die Ergebnisse auf stdout zurückgeben.Wie MATLAB über die Befehlszeile aufgerufen und vor dem Beenden auf stdout gedruckt wird

Wenn Sie den folgenden Befehl ausführen, druckt MATLAB das Lizenzbanner und wird beendet, ohne die Nachricht zu drucken.

matlab -nodisplay -nojvm -r "fprintf(1, 'value: %f\n', 2.0); quit;"

* Anmerkung: Ich derzeit Version leite 7.10.0.499 (R2010a) 64-bit (maci64)

+1

möglich Duplikat [Wie kann ich MATLAB stoppen, bis nach einer Rückkehr Befehlszeilenskript abgeschlossen?] (http://stackoverflow.com/questions/14495/how-can-i-stop-matlab-from-returning-until-after-a-command-line-script-completes) – gnovice

+0

The Problem mit "wie kann ich Matlab von der Rückkehr bis nach Abschluss eines Befehlszeilenskripts stoppen?" hängt damit zusammen, wie Windows ein separates Befehlsfenster öffnet, um Befehle auszuführen, ohne Terminal zu blockieren. Außerdem ist die Verwendung der Befehlszeilenoption -wait, die die Lösung für dieses Problem darstellt, auf Nicht-Windows-Systemen nicht vorhanden. – papahabla

Antwort

7

Wie in dieser related post gezeigt wurde, können Sie die -logfile Option verwenden, um eine Kopie zu erstellen aller Ausgaben in eine Datei.

matlab -nodisplay -nojvm -logfile out.txt -r "fprintf(1, 'value: %f\n', 2.0); quit;" 

Auf Windows, verwenden Sie die -wait Befehlszeilenoptionen, die Ausführung des Skripts zu blockieren, bis MATLAB schließt.

Auf Unix können Sie sleep 5s verwenden 5 Sekunden lang zu schlafen, oder verwenden Sie die wait Befehlsausführung zu unterbrechen, bis der Prozess beendet ist:

#!/bin/sh 
matlab -nodisplay -logfile out.txt -r "rand(3), quit" 
wait $(ps | grep matlab | awk '{print $2}') && cat out.txt 
Verwandte Themen