我尝试编写执行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不显示那些文字,所以我只能得到这个数字?
答案 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存储库中。