0
我想跑与ruby
的net::ssh
远程命令,并希望能够打印输出stdout
,但我没有看到任何东西在下面的代码在印channel.on_data
红宝石净:: SSH不标准输出数据打印channel.on_data
见测试代码:
Net::SSH.start('testhost', "root", :timeout => 10) do |ssh|
ssh.open_channel do |channel|
channel.exec('ls') do |_, success|
unless success
puts "NOT SUCCEESS:! "
end
channel.on_data do |_, data|
puts "DATAAAAAA:! " # ======> Why am i not getting to here?? <=======
end
channel.on_extended_data do |_, _, data|
puts "EXTENDED!!!"
end
channel.on_request("exit-status") do |_, data|
puts "EXIT!!!! "
end
channel.on_close do |ch|
puts "channel is closing!"
end
end
end
end
,输出是:
channel is closing!
为什么我没有拿到入T他阻止on_data
?我想抓住stdout
。
注意,我知道客户端代码能够ssh
到remote server
,因为当我问命令是ls > ls.log
我看到ls.log
目标主机上。
感谢,但我看到'channel.on_close'被称为无添加即使手术需要2分钟'ch.wait',如果它是异步如何on_close工作和即使没有'ch.wait'也不关闭连接? – Jas
如果你不等,那么因为这个代码是异步的,应用程序可以做任何想做的事情,包括退出。如果它退出然后它将关闭所有打开的连接,包括您的异步之一。如果你在这里或任何其他地方使用ch.wait并不重要,但是如果在应用程序结束之前对你输入了重要信息,你应该等待它完成 – SztupY
我尝试运行'sleep 20'作为运行命令而没有'ch.wait',我看到它正在等待它完成。所以从一边等待它完成,但另一方面它不会在'on_data'上发送事件我不明白它是否在等待进程结束为什么不将数据发送到'on_data' ? – Jas