【问题标题】:When executing a command in a perl script can perl respond to a STDOUT request posed in the command?在 perl 脚本中执行命令时 perl 可以响应命令中提出的 STDOUT 请求吗?
【发布时间】:2011-12-12 18:00:06
【问题描述】:

我正在执行 perl 脚本中的命令,当该命令完成时,会向 STDOUT 发送一个问题,要求对问题提供 Y 或 N 答案。如果没有给出答案(即我只是结束脚本),那么我们在 shell 中有一个挂起的进程等待答案。如何提供所需的 Y 答案?

perl v5.8.4 太阳能 10

【问题讨论】:

  • 注意:脚本内的命令提出问题,而不是 perl 脚本。那么将答案发送到执行命令的shell的方法是什么?

标签: perl


【解决方案1】:
  • 最简单

    使用 shell 将“Y”重定向到命令的 STDIN 的能力:

    `echo "Y" | your_command_expecting_Y`;
    

    或(稍差但更灵活)。

    `your_command_expecting_Y < /my/file/containing/one/line/with_Y_in_it.txt`; 
    
  • 更复杂但无限灵活且 Perl 原生:

    使用Expect模块

    use Expect;
    # create an Expect object by spawning another process
    my $exp = Expect->spawn($command, @params);
    $exp->send("Y\n");
    

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      假设你总是想回答'Y'并且命令只会提示一次

      system("echo Y | your_command_here");
      

      如果命令提示不止一次,而您总是想回答“Y”:

      system("yes Y | your_command_here");
      

      否则,Expect 可能是其他人建议的最佳选择。

      【讨论】:

        猜你喜欢
        • 2012-03-29
        • 2015-11-12
        • 2013-06-17
        • 2012-10-20
        • 1970-01-01
        • 2021-12-14
        • 2014-03-24
        • 1970-01-01
        • 2012-07-21
        相关资源
        最近更新 更多