在 Matlab 中实时显示 Perl 脚本的输出
Posted
技术标签:
【中文标题】在 Matlab 中实时显示 Perl 脚本的输出【英文标题】:Show output from Perl script in Matlab in real time 【发布时间】:2012-01-05 19:35:23 【问题描述】:我有一个调用 Perl 脚本的 matlab 函数,该脚本将大文本文件转换为二进制文件以在 Matlab 中使用。有关 Perl 脚本的详细信息,请参见此处:Parsing unsorted data from large fixed width text
我的 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 中,一旦脚本完成,我所有的“在线:XXXXX”print
语句都会被转储到 Matlab 的默认变量 ans
,而不是像 Matlab 的 disp()
函数那样实际显示在提示符处。
那么,如何(如果可能)让外部程序的输出在运行时显示在 Matlab 提示符处?
【问题讨论】:
【参考方案1】:我认为你做不到。 MATLAB 将控制权传递给 perl 解释器,然后返回结果。
有一种解决方法对我有用。首先在您的 perl 脚本中添加 local $|=1;
以打开 STDOUT 自动刷新。在任何输出到 STDOUT 之前。 (例如,有关刷新缓冲区的更多详细信息,请参见 here。)然后使用 system
函数调用 perl:
system(['"path_to_perl\perl.exe" test.pl ' dataFileName]);
如果您的 perl 解释器位于带有空格的路径中,双引号很重要。
【讨论】:
【参考方案2】:尝试使用内置的perl
命令。它将运行 perl 解释器并返回结果。我认为您需要将输出放入名为result
的变量中。
来自文档:
result = perl(...) 返回尝试 Perl 调用 result 的结果。
【讨论】:
【参考方案3】:我也有类似的问题,goole 带我回答你的问题。
最后,在windows上,我使用下面的matlab代码,解决我的问题。
cmdString = 'start /WAIT ';
cmdString = [cmdString 'C:\Strawberry\perl\bin\perl extract_tti_trace.pl "' fullname '"'];
dos(cmdString)
【讨论】:
以上是关于在 Matlab 中实时显示 Perl 脚本的输出的主要内容,如果未能解决你的问题,请参考以下文章