Показывать вывод скрипта Perl в Matlab в реальном времени - PullRequest
3 голосов
/ 05 января 2012

У меня есть функция matlab, которая вызывает скрипт Perl, который преобразует большой текстовый файл в двоичный файл для использования в Matlab. Подробнее о сценарии Perl см. Здесь: Анализ несортированных данных из текста большой фиксированной ширины

Моя функция Matlab выглядит примерно так

function convertMyData(dataFileName)

%Do some checks on the data
disp('Done Checking Stuff!');

%Process data file with Perl
perl('myPerlScript.pl',dataFileName)

% More Processing on the Binary output from Perl
disp('All Done!');

В скрипте perl есть некоторые операторы печати, показывающие ход выполнения скрипта, поскольку конвертация может занять несколько минут. Примерно так:

while ($line = <INFILE>) {
    if ($lineCount % 100000 == 0){ #Display Progress every 100,000 lines
        print "On Line: ".$lineCount."\n";
    }
    #PROCESS LINE DATA HERE 
    $lineCount ++; 
} # END WHILE <INFILE>
print "Finished Reading: ".$lineCount." Lines\n";

Проблема заключается в том, что в Matlab все мои операторы "On Line: XXXXX" print просто сбрасываются в переменную Matlab по умолчанию ans, когда сценарий завершается, вместо того, чтобы фактически отображаться в приглашении, как функция disp() в Matlab.

Итак, как (если возможно) вывести вывод внешней программы, который будет отображаться в приглашении Matlab во время ее работы?

Ответы [ 3 ]

2 голосов
/ 06 января 2012

Не думаю, что ты сможешь это сделать. MATLAB передает управление интерпретатору Perl, а затем просто возвращает результаты.

Есть один обходной путь, который сработал для меня. Сначала добавьте local $|=1; в свой скрипт Perl, чтобы включить автозапуск STDOUT. Перед любым выводом в STDOUT. (См., Например, здесь для более подробной информации по очистке буфера.) Затем вызовите perl с помощью функции system:

system(['"path_to_perl\perl.exe" test.pl ' dataFileName]);

Двойные кавычки важны, если ваш интерпретатор perl находится в пути с пробелами.

1 голос
/ 11 февраля 2012

Попробуйте использовать встроенную команду perl.Он запустит интерпретатор Perl и вернет результат.Я думаю, что вам нужно поместить ваш вывод в переменную с именем result.

Из документации:

result = perl (...) возвращает результаты попытки Perlвызов к результату.

0 голосов
/ 24 ноября 2014

У меня похожая проблема, и Гул приводит меня к вашему вопросу.

Наконец, в Windows я использую следующий код matlab, поэтому решите мою проблему.

cmdString = 'start /WAIT ';
cmdString = [cmdString 'C:\Strawberry\perl\bin\perl extract_tti_trace.pl "' fullname '"'];
dos(cmdString)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...