как получить текст через backticks или систему в Perl - PullRequest
1 голос
/ 06 февраля 2012

Я хочу вызвать EXE-файл в Perl, который выполняет какое-то действие

Я пытался вызвать exe-файл через backtick и system, но в обоих случаях я получаю только возвращаемое значение

EXE-файл выводит некоторый текст на консоль.Можно ли это также зафиксировать?

Я посмотрел на эту переменную ${^CHILD_ERROR_NATIVE}, но получаю только возвращаемое значение, а не текст

Я использую Perl 5.14

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 06 февраля 2012

Приложение может не печатать свои выходные данные в STDOUT, а вместо этого STDERR, что не фиксируется оператором обратного удара. Чтобы захватить оба, вы можете использовать следующее:

my $binary = 'foo.exe';
my $output = `$binary 2>&1`;

Для более точной настройки вы можете прибегнуть к IPC::Open3, с помощью которого вы можете "контролировать" все потоки процесса (IN, OUT и * 1011). *).

1 голос
/ 06 февраля 2012

Я рекомендую функции capture и capture_err из Scriptalicious .

use Scriptalicious qw(capture);

my $output = capture('my_command', 'arg');
1 голос
/ 06 февраля 2012

Я использовал для выполнения команд из сценария perl и таким образом записывал вывод

sub execute_command() {
  my($host) = @_;
  open(COMMAND_IN, "your_command |"); 
  while (<COMMAND_IN>) 
  { #The COMMAND_IN will have the output of the command
    #Read the output of your command here...
    $ans = $_;
  }
  close(COMMAND_IN);
  return $ans;
}

Проверьте, поможет ли вам

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