在Windows上无法使用Ctrl + C中断/终止Ruby脚本

时间:2010-12-03 21:16:39

标签: ruby interrupt terminate

我的脚本打开TCP连接并从服务器读取数据。如果服务器没有响应,我尝试使用Ctrl + C中断脚本,但它不起作用。终止脚本的唯一方法是在任务管理器中终止进程。任何想法如何打断这样的脚本?

require 'socket'

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

s = TCPSocket.open(host, port)

while line = s.gets
  puts line.chop
end

s.close 

3 个答案:

答案 0 :(得分:1)

陷阱(“SIGINT”){清理;出口}

答案 1 :(得分:1)

我注意到,我在等待来自服务器的响应时c + Ctrl + C,并且一段时间后来响应,应用程序终止。但是当我在socket(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

现在我可以通过输入任何字符来终止脚本。但是对于替代解决方案仍然很高兴。

答案 2 :(得分:0)

在Windows上,键入Ctrl + Pause