在 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 脚本的输出的主要内容,如果未能解决你的问题,请参考以下文章

Perl - 如何使用在另一个 Perl 脚本的模块中创建的进程句柄

如何在 Perl 中捕获输出和退出代码时执行外部脚本?

从cron运行时,Perl脚本不会将STDOUT输出到文件

Perl Apache:Perl 脚本显示为纯文本

matlab实时编辑器简介

在 Tkinter GUI 中显示 Python 脚本的输出