1

Perl および ADB コマンドを使用して、logcat ログをキャプチャし、同時にテキスト ファイルに保存しようとしています (携帯電話で手動 PLMN 検索を実行しながら)。私は Python に精通していますが、従来の理由から Perl を使用する必要があります。

ログのキャプチャ中に、次の logcat 文字列 >> /EVENT_NETWORK_SCAN_COMPLETED/ << を待ってから、ログのキャプチャを保存/停止して終了することを望んでいます。

いくつかのオンライン ポインターを使用して以下のスクリプトを実行しようとしましたが、スクリプトが終了しないため、私の方法はおそらくタスクに対して単純すぎると結論付けました。私がどこで間違っているのか、または実際にこのタスクが可能かどうかを誰かに教えてもらえますか? ありがとう。

  use strict;
  use warnings;
  use diagnostics;

     sleep(5);
     system('adb wait-for-device');
     my $CollectLog = system('adb logcat > logcat.txt');
     my @Lines = split("\n", $CollectLog);

  # process lines
  foreach my $Line ( @Lines )
  {
        if($CollectLog =~ /EVENT_NETWORK_SCAN_COMPLETED/m)
        {
            print "string matches the pattern\n";
            system('adb logcat -d'); 
            last;
        }
  }
4

3 に答える 3

0

これには、expect と呼ばれるモジュールがあります: http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod

システムがフォークして何も返さないという問題。バックティックを使用する必要がありますが、この仕事には期待の方が適しています。

  use Expect;
  use Data::Dumper;

  # create an Expect object by spawning another process
  my $exp = Expect->spawn('adb wait-for-device') or die "Cannot spawn 'adb wait-for-device': $!\n";
  ### wait timeout sec or the string 
  $exp->expect($timeout,'-re',/EVENT_NETWORK_SCAN_COMPLETED/);
  ### get everything before this string
  my $CollectLog = $exp->exp_before();
  ### print out
  print Dumper($CollectLog);
  # if no longer needed, do a soft_close to nicely shut down the command
  $exp->soft_close();
于 2013-11-07T15:02:50.887 に答える