我想在Perl中调用一个执行某些操作的EXE文件
我尝试通过backtick
和system
调用exe文件,但在这两种情况下我只得到返回值
exe文件将一些文本打印到控制台。是否有可能捕获它?
我研究了这个变量${^CHILD_ERROR_NATIVE}
,但我得到的只是返回值,而不是文本
我使用的是Perl 5.14
提前致谢
答案 0 :(得分:5)
应用程序可能不会将其输出打印到STDOUT
,而是打印STDERR
,这不会被反引号操作符捕获。要捕获两者,您可以使用以下内容:
my $binary = 'foo.exe';
my $output = `$binary 2>&1`;
要进行更精细的捕获,您可能需要求助于IPC::Open3
,您可以“控制”所有流程的流(IN
,OUT
和{{ 1}})。
答案 1 :(得分:1)
我曾经从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;
}
检查它是否对您有所帮助
答案 2 :(得分:1)
我推荐Scriptalicious中的capture
和capture_err
函数。
use Scriptalicious qw(capture);
my $output = capture('my_command', 'arg');