Как мне прервать цикл в сценарии командной строки, но только после завершения метода? - PullRequest
2 голосов
/ 09 марта 2012

У меня есть скрипт на Ruby, который выглядит следующим образом:

def big_function
  puts "starting..."
  #does stuff
  puts "done"
end

loop do
  big_function
end

Он работает бесконечно, выполняя big_function.

Мне нужен способ, чтобы пользователь мог прервать запущенный скрипт, но не в середине big_function. Если оно прервано во время работы big_function, оно должно завершиться, когда будет выполнено big_function.

Ответы [ 2 ]

5 голосов
/ 09 марта 2012

Ловушка делает это:

interrupted = false
trap("INT") { interrupted = true } # traps Ctrl-C
puts 'Press Ctrl-C to exit'

def big_function
  puts "starting..."
  sleep 1
  puts "done"
end

until interrupted do
  big_function
end
2 голосов
/ 09 марта 2012

Вы можете использовать флаги. У вас может быть отдельный процесс опроса в ключе запуска пользователя, и если он щелкает или нажимает клавишу, флаг меняет состояние. Вам нужно будет проверить флаг перед выходом.

flag = false

t = Thread.new() {
  loop do
    flag = gets
    break if flag
  end
}

def big_function
  puts "starting..."
  #does stuff
  puts "done"
end

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