Как обнаружить процесс, заканчивающийся на Ruby open3 - PullRequest
3 голосов
/ 19 июня 2010

Если я открою с:

ввод, вывод, ошибка = Open3.popen3 "nikto -host someip -port 80 -output xml"

Как я могу определить, готов ли nikto? Сканирование занимает некоторое время.

Если что-то пойдет не так, я полагаю, мне нужно периодически проверять ошибки, чтобы увидеть, было ли что-нибудь написано?

Существуют ли приличные документы для open3? Нет, рубиновые документы далеко не приличные.

Ответы [ 4 ]

3 голосов
/ 19 июня 2010
input, output, error = Open3.popen3 "nikto -host someip -port 80 -output xml"

if select([output], nil, nil, 0.1) and output.eof?
  # process exited and doesn't have output queued.
else
  # still running or has output not read yet.
end

Кроме того, вот несколько хороших документов, которые я нашел по поиску:

1 голос
/ 26 июня 2010

Если вы используете любую * nix ОС, ваш процесс получит SIGCHLD при выходе из подпроцесса. В зависимости от того, имеется ли у вас более одного подпроцесса за раз, его можно использовать для определения его завершения.

Кроме того, каналы ввода-вывода для подпроцесса реализованы под колпаком с трубами, поэтому вы обязательно получите EOF в конце вывода и, возможно, SIGPIPE, когда он тоже выключится.

В Ruby установка обработчика сигнала выполняется просто:

Signal.trap("CHLD") do
  Process.wait
  $child_died = true
end
1 голос
/ 22 июня 2010

Вы можете получить PID от $?

 Process.wait $?.pid

Оказывается, это было неправильно. Смотрите некоторые варианты здесь:

http://en.wikibooks.org/wiki/Ruby_Programming/Running_Multiple_Processes

0 голосов
/ 22 ноября 2014

Выходные данные видны после завершения выполнения команды

Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
  puts "stdout is:" + stdout.read
  puts "stderr is:" + stderr.read
end

Выходные данные отображаются постепенно

Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
  while line = stderr.gets
    puts line
  end
end

Проверьте эту дополнительную опцию http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...