Динамически перенаправить stdout ребенка в Windows - PullRequest
1 голос
/ 08 сентября 2010

Я заметил пару других вопросов об обработке этого, но все, кажется, страдают от:

  • Не работает на окнах
  • , требующих, чтобы ребенок закончил перед получением вывода

То, что я хотел бы сделать, это вызвать программу (например, tshark.exe) и обработать ее вывод во время работы.

На сегодняшний день я пытался:

  • Backticks
  • Run3
  • Proc :: Reliable

все безуспешно.Я мог бы потратить весь день, пытаясь и не найдя модуль, который поможет мне в этом (т.е. я провел весь день), но я подумал, что было бы лучше, если бы я просто спросил, знает ли кто-нибудь об этом.

Ответы [ 2 ]

4 голосов
/ 08 сентября 2010

Вам не нужен модуль. Просто узнайте о конвейерных формах команды open - они прекрасно работают в Windows.

my $pid = open (my $cmd_handle, "tshark.exe @options |");
# on success, $pid holds process identifier of the external command.

while (<$cmd_handle>) {
    # sets $_ to next line of output.
    # Will block until a line of output is ready.
    # Is  undef  when the command is complete.

    ... process $_ ...
}
close $cmd_handle;   # waits for command to complete if it hasn't completed yet
0 голосов
/ 08 сентября 2010

Выезд IPC::Run. IPC::Open2 и IPC::Open3 тоже могут удовлетворить ваши потребности.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...