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

时间:2016-06-13 01:18:46

标签: perl stdin

我有一个Perl脚本,用反引号调用另一个程序,并检查输出是否有某些字符串。运行正常。

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

如何告诉我的Perl脚本在此程序中按两次输入?

2 个答案:

答案 0 :(得分:3)

已启动的命令从脚本接收相同的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输入,并读取命令输出。

答案 1 :(得分:2)

你可以把它们管道输入:

echo "\n\n" | yourcommand