与另一个程序的 STDIN 交互的 Perl 脚本

Perl script interacting with another program's STDIN

我有一个 Perl 脚本,它调用另一个带有反引号的程序,并检查某些字符串的输出。这 运行 很好。

我遇到的问题是当其他程序无法执行其正在执行的操作并等待用户输入时。它要求用户在退出程序前按回车键两次。

如何让我的 Perl 脚本在此程序上按两次 Enter 键?

您可以将它们通过管道输入:

echo "\n\n" | yourcommand

启动的命令从您的脚本接收相同的 STDIN 和 STDERR,只是 STDOUT 通过管道传输到您的脚本。

您可以在 运行 命令之前关闭 STDIN,这样就没有输入源了。从 STDIN 读取将导致错误,调用的命令将退出:

close STDIN;
my @slines = `$command`;

这也将使控制台输入您的脚本的任何机会都无效。

另一种方法是使用 IPC::Open2,它允许您的脚本同时控制命令的 STDIN 和 STDOUT:

use IPC::Open2;
open2($chld_in, $chld_in, 'some cmd and args');
print $chld_in "\n\n";
close $chld_in;
@slines = <$chld_out>;
close $chld_out;

此脚本提供命令所需的两个 \n 输入并读取命令输出。