如何在 Perl 中通过反引号或系统获取文本

发布于 2025-01-02 09:48:32 字数 260 浏览 0 评论 0 原文

我想在 Perl 中调用一个 EXE 文件,它执行一些操作

我尝试通过 backticksystem 调用 exe 文件,但在这两种情况下我只得到返回值

exe文件将一些文本打印到控制台上。是否也可以捕获它?

我查看了这个变量 ${^CHILD_ERROR_NATIVE} 但我只得到返回值而不是文本

我正在使用 Perl 5.14

提前致谢

I want to call a EXE file in Perl which performs some action

I tried calling the exe file via backtick and system but in both the cases i get only the return value

The exe file prints some text on to the console. Is it possible to capture that as well?

I looked into this variable ${^CHILD_ERROR_NATIVE} but I get only the return value and not text

I am using Perl 5.14

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

回忆那么伤 2025-01-09 09:48:32

应用程序可能不会将其输出打印到 STDOUT,而是打印到 STDERR,而反引号运算符不会捕获该输出。要捕获两者,您可以使用以下命令:

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

为了进行更精细的捕获,您可能需要求助于 IPC ::Open3,您可以使用它“控制”进程的所有流(<​​code>IN、OUTERR)。

The application might not print its output to STDOUT but STDERR instead, which isn't captured by the backtick operator. To capture both, you could use the following:

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

For a more fine-tuned capturing, you might want to resort to IPC::Open3 with which you can "control" all of a process' streams (IN, OUT and ERR).

岁月染过的梦 2025-01-09 09:48:32

我曾经从 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;
}

检查它是否对您有帮助

I used to execute commands from perl script and capture the output this way

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;
}

Check whether it helps you

慢慢从新开始 2025-01-09 09:48:32

我推荐 capture 和 capture_err 函数rel="nofollow">Scriptalicious

use Scriptalicious qw(capture);

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

I recommend the capture and capture_err functions from Scriptalicious.

use Scriptalicious qw(capture);

my $output = capture('my_command', 'arg');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文