我应该承认我之前向我的问题发布了一个相关问题。但是我已经从我最初的问题向前迈进了一步,现在这个问题与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;
答案 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;