使用PuTTY的PSFTP编写脚本并抑制输出

时间:2015-05-12 15:06:38

标签: ruby windows putty zabbix

我尝试编写执行PuTTY's PSFTP程序的ruby脚本并接收输出以用于进一步处理,然后将数字报告给Zabbix。但是,当我运行脚本时,PSFTP输出一些文本,抛出我的Zabbix项目。

@Controller
@SessionAttributes("userData")
public class UserController {

    @Autowired
    @Value("${server_ip}")  
    String server_ip;
    @Value("${username}")   
    String username;



    public @ResponseBody
    @RequestMapping(value = "/validateuser")
    String validateUser(@RequestParam("user") String user){
        //UserCheck userCheck = new UserCheck();
        //String test = userCheck.isUserPresent(user);
        return "";

    }//validateUser

    @PostConstruct
    public void init(){
        System.out.println("server_ip in inti: " + server_ip);
        System.out.println("username: " + username);

    }

}

注释的行是抛弃我的Zabbix项目的部分。由于我使用Windows,因此Linux必须将所有输出抛出到/ dev / null的方法不适用,我无法安装Cygwin。有没有办法让Ruby,或PSFTP不显示那些文字,所以我只能得到这个数字?

我的代码位于:https://github.com/predatorian3/gem_sftp3

1 个答案:

答案 0 :(得分:1)

疯狂地谷歌搜索了一天后,我终于偶然发现了一篇博文

http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html

这篇博文解释了Popen3是什么。我把它放在我的代码中,现在它只显示我想要显示的输出,而不是外部程序试图显示的内容。代码块看起来像

count = 0

Open3.popen3( psftp_cmd ) do |stdin, stdout, stderr, wait_thr|
  while line = stdout.gets
    count += 1 if line =~ pattern
  end
end

puts count

然后我得到的结果是:

C:\Ruby\>corporate_sftp3 -o xml
3

最终代码发布在初始帖子的Github存储库中。