【问题标题】:Ruby prevent default CTRL+C output ^CRuby 阻止默认的 CTRL+C 输出 ^C
【发布时间】:2015-06-25 12:06:15
【问题描述】:

我正在捕捉信号

rescue Interrupt => e

但它总是打印:

^CShutting down!

有没有办法阻止默认的CTRL+C输出:

^C

有什么想法吗?

【问题讨论】:

  • 你想通过捕捉信号来达到什么目的?忽略该信号是可能的(并且相对容易),但如果您需要受控关闭,则可能会有点困难,只是没有消息。看起来其他一些库正在显示该消息,并且可能希望执行关闭。
  • 您能否澄清一下您的代码是否在编写“正在关闭!” - 即您想要该消息,而不是 ^C 回显到终端?
  • 是的,我的代码确实显示“正在关闭”。收到信号后,我的代码会取消当前进程,保存进度,将“关闭”并退出 0。

标签: ruby signals rescue


【解决方案1】:

部分终端支持stty -echoctl禁用控制字符回显:

`stty -echoctl`

begin
  loop do
    # ...
  end
rescue Interrupt => e
  puts 'shutting down'
end

如果上述方法不起作用,您可以通过将IO#echo= 设置为false 来禁用所有回显:

require 'io/console'

STDIN.echo = false

begin
  loop do
    # ...
  end
rescue Interrupt => e
  puts 'shutting down'
end

【讨论】:

  • 完美的第二个建议就像一个魅力。干杯,欣赏!
猜你喜欢
  • 2013-02-12
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 2019-08-06
  • 2015-06-20
  • 1970-01-01
相关资源
最近更新 更多