要从Perl脚本中捕获系统命令的stdin和stdout,您可以使用IPC::Open2
或IPC::Open3
模块。这里我们将介绍如何使用IPC::Open2
模块来实现这个目标。
IPC::Open2
模块:perl -MCPAN -e 'install IPC::Open2'
IPC::Open2
模块捕获stdin和stdout:#!/usr/bin/perl
use strict;
use warnings;
use IPC::Open2;
my $cmd = "echo 'Hello, World!'"; # 替换为您想要执行的命令
my $pid = open2(\*CHLD_OUT, \*CHLD_IN, $cmd);
# 将输入数据写入命令的stdin
print CHLD_IN "Input data here\n";
close CHLD_IN;
# 从命令的stdout中读取数据
my $output = "";
while (<CHLD_OUT>) {
$output .= $_;
}
close CHLD_OUT;
# 等待命令执行完成
waitpid($pid, 0);
# 输出命令的stdout
print "Command output: $output";
在这个示例中,我们使用open2
函数创建了一个子进程,并将命令的stdin和stdout与当前Perl脚本的文件描述符关联起来。然后,我们可以通过CHLD_IN
文件描述符将数据写入命令的stdin,通过CHLD_OUT
文件描述符从命令的stdout中读取数据。最后,我们使用waitpid
函数等待命令执行完成。
请注意,这个示例仅适用于简单的命令,如果您需要执行更复杂的命令,例如管道、I/O重定向等,您可能需要使用IPC::Open3
模块。
领取专属 10元无门槛券
手把手带您无忧上云