找到字符串后,使用Perl干净地退出STDOUT对话框

时间:2013-11-08 16:42:28

标签: perl

我应该承认我之前向我的问题发布了一个相关问题。但是我已经从我最初的问题向前迈进了一步,现在这个问题与ADB命令相关的Perl相关性更高。感谢我的上一张海报,他建议我查看Expect功能,但是我无法在Win7平台上成功安装此模块。我已经改变了原来的脚本。

我在下面有以下脚本,我可以在手机上执行手动PLMN扫描的同时捕获Android手机ADB logcat文本的输出。并且脚本将记录logcat,直到找到指定的字符串(字符串>> / EVENT_NETWORK_SCAN_COMPLETED /<&lt ;;)然后日志停止。该脚本适用于此处,但是从这一点开始,STDOUT文本在我的CMD窗口中滚动,然后挂起在找到的字符串的点上,但是没有C:>提示,所以退出我需要在键盘上执行手动Ctrl + C.理想情况下,我更喜欢不显示STDOUT滚动文本,只需将其发布到文本文件,然后返回到我的CMD窗口中的命令提示符。对于类似的帖子感到抱歉,我此刻似乎只是在转圈。

use warnings;
use diagnostics;
use strict;

open my $fh, '>', "output.txt" or die "Cannot open output.txt: $!";

open( README, "adb logcat |" ) or die "Can't run program: $!\n";
while (<README>) {
    print $fh "$_\n";
    if ( $_ =~ /EVENT_NETWORK_SCAN_COMPLETED/ ) { 
        system('adb logcat -d');
        system('exit');
    }   
}
close $fh;

1 个答案:

答案 0 :(得分:2)

你需要杀死进程以停止从中读取。这看起来像是:

my $pid = open my $log, "-|", "adb logcat";
while(<$log>) {
    $fh->print($_);
    last if m/EVENT_NETWORK_SCAN_COMPLETED/;
}
kill "TERM", $pid;
close $log;