Как обойти запросы подтверждения внешнего процесса? - PullRequest
0 голосов
/ 23 ноября 2011

Как я могу преобразовать этот Perl-код в Groovy?

Как обойти запросы подтверждения внешнего процесса?

Я пытаюсь преобразовать Perl-скрипт в Groovy.Программа автоматически загружает / удаляет задания Maestro (планирование заданий).Проблема заключается в том, что команда удаления будет запрашивать подтверждение (Y / N) для каждого найденного задания.Я попытался выполнить процесс в Groovy, но остановлюсь на подсказках.Скрипт Perl записывает кучу Ys в поток и печатает его в обработчик (если я правильно понял), чтобы избежать остановки.Мне интересно, как сделать то же самое в Groovy?

Или любой другой подход к выполнению команды и как-то написать Y в каждом запросе подтверждения.

Perl Script:

 $maestrostring="";
 while ($x < 1500) {
    $maestrostring .= "y\n";
    $x++;
 }

  # delete the jobs
  open(MAESTRO_CMD, "|ssh mserver /bin/composer delete job=pserver#APPA@") 
  print MAESTRO_CMD $maestrostring;
  close(MAESTRO_CMD);

Это мой рабочий код:

    def deleteMaestroJobs (){
            ...
    def commandSched ="ssh $maestro_server /bin/composer delete sched=$primary_server#$app_acronym$app_level@"
    def commandJobs  ="ssh $maestro_server /bin/composer delete job=$primary_server#$app_acronym$app_level@"

    try {
        executeCommand commandJobs
    }
    catch (Exception ex ){
        throw new Exception("Error executing the Maestro Composer [DELETE]")
    }

    try {
        executeCommand commandSched
    }
    catch (Exception ex ){
        throw new Exception("Error executing the Maestro Composer [DELETE]")
    }
}


    def executeCommand(command){
        def process = command.execute()
        process.withWriter { writer ->
          writer.print('y\n' * 1500)
        }
       process.consumeProcessOutput(System.out, System.err)
       process.waitFor()
}

Ответы [ 3 ]

2 голосов
/ 23 ноября 2011

Прямой перевод будет:

'ssh mserver /bin/composer delete job=pserver#APPA@'.execute().withWriter { writer ->
    writer.print('y\n' * 1500)
}
0 голосов
/ 23 ноября 2011

Стандартная программа Unix yes создана для такого рода вещей.

yes | ssh mserver /bin/composer delete job=pserver#APPA@

Обратите внимание, что yes выдаст бесконечное количество, если есть шанс. Но при использовании с таким каналом он просто на один шаг впереди другого конца канала, ждет, пока он перехватит чтение, и, наконец, завершает работу, когда ОС дает SIGPIPE.

0 голосов
/ 23 ноября 2011

Другой вариант - использовать yes:

system( qq(ssh mserver "yes y | /bin/composer delete job=pserver#APPA\@") );
...