Ruby有很多方法来运行系统命令,无论是system()还是exec()或反引号等。
但是,我发现只有system和exec(据我所知)能够打印某些命令的彩色输出,同时还提供允许我取消命令的PID。
还有其他方法可以从Ruby命令行脚本运行系统命令,从而使我能够满足以下要求?
弄乱了一段时间之后,我发现IO.popen返回了一个包含pid的对象,还可以用于打印所有捕获的输出。它也不会干扰从Ruby中调用的系统命令的ANSI输出。我的代码现在看起来像这样:
#!/usr/bin/ruby
def shutdown()
`kill #{$pid}`
end
["INT", "KILL", "TERM"].each { |_sig| Signal.trap(_sig) { shutdown() } }
process = IO.popen("ls --color ~; ping -c 10 www.google.com")
$pid = process.pid
process.each { |_line| puts _line }
因此,我可以取消ls和ping命令,而无需从终端使用Control-C取消我的Ruby代码,并且如果需要的话,还可以在打印行之前对其进行操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句