我有一个Perl脚本,用反引号调用另一个程序,并检查某些字符串的输出。这运行良好。Perl脚本与另一个程序的STDIN交互
我遇到的问题是当其他程序在做什么时出现故障并等待用户输入。它要求用户在退出程序之前按两次输入。
如何告诉我的Perl脚本在此程序上按两次Enter?
我有一个Perl脚本,用反引号调用另一个程序,并检查某些字符串的输出。这运行良好。Perl脚本与另一个程序的STDIN交互
我遇到的问题是当其他程序在做什么时出现故障并等待用户输入。它要求用户在退出程序之前按两次输入。
如何告诉我的Perl脚本在此程序上按两次Enter?
的启动命令从您的脚本接收到相同的STDIN和STDERR,只是STDOUT通过管道输送到你的脚本。
您可以在运行命令之前关闭STDIN,并且不会有输入源。从标准输入读取会导致错误和被叫命令将退出:
close STDIN;
my @slines = `$command`;
这也将导致控制台输入的任何机会,你的脚本。
另一种方法是使用IPC::Open2
,让你的脚本在同一时间,以控制标准输入和命令的标准输出:
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
输入和读取命令的输出。
我发现使用'close STDIN'不允许我捕获正在运行的程序的完整输出。我假设你的代码中有一个错字 - 它应该是'open2($ chld_out,$ chld_in,'一些cmd和args');'? 但是我仍然遇到同样的问题 - 我读过这是因为我在Windows上运行? –
我设法通过在open2行之后添加两行来实现这个工作:'sleep(10);打印$ chld_in;' - 我假设它发送给孩子,然后准备好接受\ n \ n,并且我发现在其他地方打印$ chld_in可以帮助Windows系统。谢谢@Sebastian指引我朝着正确的方向前进 –
你可以只管他们:
echo "\n\n" | yourcommand
我当前的代码看起来是这样的:我 = @slines'“$ command'; 难道则成为: 我@slines = echo“\ n \ n”|'“$ command'; ? –
http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod – xxfelixxx