2

我应该承认我早些时候发布了一个与我的问题相关的问题。但是,我从最初的问题又向前迈进了一步,现在与 Perl 相关的问题比 ADB 命令相关的更多。感谢我最后一位建议我研究 Expect 功能的发帖人,但是我无法在 Win7 平台上成功安装此模块。我已经改变了我原来的剧本。

我在下面有以下脚本,我可以在其中捕获 Android 手机 ADB logcat 文本的输出,同时在手机上执行手动 PLMN 扫描。并且脚本将记录 logcat 直到找到指定的字符串(字符串 >> /EVENT_NETWORK_SCAN_COMPLETED/ <<)然后日志停止。脚本工作到这里,但是从这一点开始,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;
4

1 回答 1

2

您需要终止进程才能停止读取它。这看起来像:

my $pid = open my $log, "-|", "adb logcat";
while(<$log>) {
    $fh->print($_);
    last if m/EVENT_NETWORK_SCAN_COMPLETED/;
}
kill "TERM", $pid;
close $log;
于 2013-11-08T18:16:51.080 回答