1

ループして別の引数でバイナリを呼び出すPERLスクリプトがあります。IPC::Runを使用しています。ユーザーが「ENTER」などのキーを押すと、次のようなステータスメッセージが表示されます。

「現在、合計28のスクリプトのうち14に取り組んでいます(50%完了)」

私のスクリプトは次のとおりです。

    foreach my $file (@files) {

        $file =~ s/$file_dir//;

        #Run the test case, store the output in $stdout 
        run [ "php", "PROGRAM.phar", "$file" ], ">", \my $stdout;

                    print LOG_FILE "Return code $?\n";
                    print LOG_FILE "Output: $stdout");

    }

基本的に、ステータスメッセージを表示するためにバイナリを中断するにはどうすればよいですか?

4

1 に答える 1

1

このIPC::Runの使用法を修正すると、マルチスレッド化されません。コマンドを1つずつ実行しますが、プロセスが1つしかないため、メッセージを印刷することはできません。

好き:

  use Parallel::ForkManager;

  $pm = new Parallel::ForkManager($MAX_PROCESSES);
  my $input;

  foreach $data (@all_data) {
    # Forks and returns the pid for the child:
    my $pid = $pm->start and next;

    ... do some work with $data in the child process ...

    $pm->finish; # Terminates the child process
    chomp($input= <STDIN>);
    print "Some statistics\n" if $input =~ m!\n!;

  }

よろしく、

于 2012-12-04T09:15:36.737 に答える