【发布时间】:2019-10-27 15:43:48
【问题描述】:
我有一个 Perl 脚本
for my $i (1..10) {
print "How $i\n";
sleep(1);
}
我想从另一个 perl 脚本运行它并捕获它的输出。我知道我可以使用 qx() 或反引号,但它们会在程序退出时同时返回所有输出。
但是,我想要的是在第二个脚本可用时立即打印第一个脚本的输出,即。对于示例代码,第一个脚本的输出从第二个脚本分十步打印出来,而不是一次打印。
我查看了this question 并将我的第二个脚本编写为
my $cmd = "perl a.pl";
open my $cmd_fh, "$cmd |";
while(<$cmd_fh>) {
print "Received: $_\n";
STDOUT->flush();
}
close $cmd_fh;
但是,输出仍在同时打印。我想知道如何完成这项工作?
【问题讨论】:
-
在this post 中带有
IPC::Run的伪终端的简单而具体的示例。如果可用,还可以选择使用程序unbuffer;在链接页面上查看其他答案。