与另一个程序交互的Perl脚本';s标准

与另一个程序交互的Perl脚本';s标准,perl,stdin,Perl,Stdin,我有一个Perl脚本,它使用backticks调用另一个程序,并检查输出中的某些字符串。这是运行良好 我遇到的问题是,当另一个程序在做什么时失败,并等待用户输入。它要求用户在退出程序之前按enter键两次 如何让我的Perl脚本在此程序上按两次enter键?您可以直接将它们导入: echo "\n\n" | yourcommand 你可以直接用管道将它们插入: echo "\n\n" | yourcommand started命令从脚本接收相同的STDIN和STDERR,只是STDOUT通过

我有一个Perl脚本,它使用backticks调用另一个程序,并检查输出中的某些字符串。这是运行良好

我遇到的问题是,当另一个程序在做什么时失败,并等待用户输入。它要求用户在退出程序之前按enter键两次


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

您可以直接将它们导入:

echo "\n\n" | yourcommand

你可以直接用管道将它们插入:

echo "\n\n" | yourcommand

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

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

close STDIN;
my @slines = `$command`;
这也将使任何控制台输入脚本的机会无效

另一种方法是使用脚本同时控制命令的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;
使用IPC::Open2;
open2($chld_in,$chld_in,'some cmd and args');
在“\n\n”中打印$chld\u;
关闭$chld_in;
@斯莱恩=;
关闭$chld_;

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

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

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

close STDIN;
my @slines = `$command`;
这也将使任何控制台输入脚本的机会无效

另一种方法是使用脚本同时控制命令的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;
使用IPC::Open2;
open2($chld_in,$chld_in,'some cmd and args');
在“\n\n”中打印$chld\u;
关闭$chld_in;
@斯莱恩=;
关闭$chld_;

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

我当前的代码如下所示:My@slines=
“$command
;它是否会变成:My@slines=echo”\n\n“|
”$command
?我当前的代码如下所示:My@slines=
“$command
;它会变成:My@slines=echo”\n\n“|
”$command
?我发现使用
close STDIN
无法捕获正在运行的程序的完整输出。我假设你的代码中有输入错误-应该是
open2($chld_out,$chld_in,'some cmd and args')?然而,我仍然有同样的问题——我读到这可能是因为我在Windows上运行?我在open2行之后添加了两行代码来实现这一点:
sleep(10);在中打印$chld_-我假设它是在孩子准备接受之前发送给孩子的\n\n,我在Windows系统的帮助中找到了其他打印$chld\u的地方。感谢@Sebastian为我指明了正确的方向。我发现使用
close STDIN
无法捕获正在运行的程序的完整输出。我假设你的代码中有输入错误-应该是
open2($chld_out,$chld_in,'some cmd and args')?然而,我仍然有同样的问题——我读到这可能是因为我在Windows上运行?我在open2行之后添加了两行代码来实现这一点:
sleep(10);在中打印$chld_-我假设它是在孩子准备接受之前发送给孩子的\n\n,我在Windows系统的帮助中找到了其他打印$chld\u的地方。感谢@Sebastian为我指明了正确的方向