Не могу прервать / прекратить работу Ruby-скрипта с помощью Ctrl + C в Windows - PullRequest
4 голосов
/ 04 декабря 2010

Мой скрипт открывает TCP-соединение и считывает данные с сервера.Если сервер не отвечает, я пытаюсь прервать сценарий с помощью Ctrl + C, но он не работает.Единственный способ завершить работу скрипта - это убить процесс в диспетчере задач.Есть идеи, как прервать такой сценарий?

require 'socket'

host = '...'
port = ...

s = TCPSocket.open(host, port)

while line = s.gets
  puts line.chop
end

s.close 

Ответы [ 3 ]

1 голос
/ 04 декабря 2010

Я заметил, что это я нажимаю Ctrl + C во время ожидания ответа от сервера, и через некоторое время приходит последний ответ, приложение закрывается.Но пока я жду сокета (s.gets), Ctrl + C не действует.

Поэтому я решил проблему, запустив сетевой код в другом потоке.

require 'socket'

host = '...'
port = ...

t = Thread.new do
  s = TCPSocket.open(host, port)

  while line = s.gets
    puts line.chop
  end

  s.close 
end

STDIN.getc

Теперь я могу завершить сценарий, набрав любой символ.Но все же было бы неплохо узнать об альтернативном решении.

1 голос
/ 04 декабря 2010

ловушка ("SIGINT") {очистить; выход} * * 1 001

0 голосов
/ 04 декабря 2010

В Windows введите Ctrl + Pause

...