gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:36 25 4
gpt4 key购买 nike

我有调用 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 中,我所有的“On Line: XXXXX”print 语句一旦脚本完成就被转储到 Matlab 的默认 ans 变量,而不是实际显示在类似 Matlab 的 disp() 函数的提示下。

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

最佳答案

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

有一种解决方法对我有用。首先在您的 perl 脚本中添加 local $|=1; 以打开 STDOUT 自动刷新。在任何输出到 STDOUT 之前。 (例如,有关刷新缓冲区的更多详细信息,请参见 here。)然后使用 system 函数调用 perl:

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

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

关于perl - 在 Matlab 中实时显示 Perl 脚本的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8748599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com