/ / як отримати текст через зворотні посилання або систему в Perl - perl, зворотні посилання

як отримати текст через заставки або систему в Perl - perl, бектик

Я хочу викликати файл EXE у Perl, який виконує певні дії

Я спробував зателефонувати до exe-файлу через backtick і system але в обох випадках я отримую лише повернене значення

Файл exe друкує деякий текст на консолі. Чи можна зафіксувати і це?

Я вивчив цю змінну ${^CHILD_ERROR_NATIVE} але я отримую лише повернене значення, а не текст

Я використовую Perl 5.14

Спасибі заздалегідь

Відповіді:

5 за відповідь № 1

Програма може не надрукувати свої результати STDOUT але STDERR натомість, що не зафіксовано оператором зворотного тику. Щоб захопити обидва, ви можете використовувати наступне:

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

Для більш тонкої зйомки, можливо, вам вдасться вдатися IPC::Open3 за допомогою якого ви можете "контролювати" всі потоки процесу (IN, OUT і ERR)


1 для відповіді № 2

Раніше я виконував команди зі скрипта 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;
}

Перевірте, чи це вам допомагає


1 для відповіді № 3

Я рекомендую capture і capture_err функції з Сценаричний.

use Scriptalicious qw(capture);

my $output = capture("my_command", "arg");