Я хочу викликати файл 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");