在Matlab中实时显示Perl脚本的输出

在Matlab中实时显示Perl脚本的输出,perl,matlab,Perl,Matlab,我有一个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',dataFile

我有一个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";
while($line=){
如果($lineCount%100000==0){#每100000行显示一次进度
打印“联机:”.$lineCount.\n”;
}
#这里是生产线数据
$lineCount++;
}#中途结束
打印“已完成阅读:”.$lineCount.“行\n”;
问题是,在Matlab中,脚本完成后,我所有的“On-Line:XXXXX”
print
语句都会转储到Matlab的默认
ans
变量中,而不是像Matlab的
disp()
函数那样在提示符处实际显示


那么,如何(如果可能的话)让外部程序的输出在运行时显示在Matlab提示符下呢?

我认为你做不到。MATLAB将控制传递给perl解释器,然后返回结果

有一种变通方法对我有效。首先添加
本地$|=1以启用标准输出自动刷新。在任何输出到标准输出之前。(例如,有关刷新缓冲区的更多详细信息,请参阅。)然后使用
system
函数调用perl:

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

如果您的perl解释器位于带有空格的路径中,则双引号非常重要。

尝试使用内置的
perl
命令。它将运行perl解释器并返回结果。我认为您需要将输出放入名为
result
的变量中

从文件中:

result=perl(…)返回尝试对result进行perl调用的结果


我有一个类似的问题,古尔带我去问你的问题

最后,在windows上,我使用以下matlab代码,因此解决了我的问题

cmdString = 'start /WAIT ';
cmdString = [cmdString 'C:\Strawberry\perl\bin\perl extract_tti_trace.pl "' fullname '"'];
dos(cmdString)