运行的进程,当检测到错误,我用open3执行从JRuby的DOS命令创建的helper方法,在Ruby中......如何使用Ruby和open3
def ShellUtils.execute_cmd(cmd)
$ERRORS = ['Invalid type','Invalid path']
out = nil
err = nil
Open3.popen3(cmd) {|stdin, stdout, stderr, wait_thr|
out = stdout.read
err = stderr.read
unless err.nil?
err = $ERRORS.detect {|e| err.include? e }
end
out.each {|line| logger.info "#{line}"} unless out.nil?
err.each {|line| logger.error #{line}"} unless err.nil?
}
return out, err
end
如果过程的任何部分正在执行无效,会输出错误消息及其用法。下面是执行在DOS下没有的JRuby或Ruby涉及的过程时正常的错误输出...
C:\PROJECTS\bin>import.bat -su -types ws,v
Invalid type. Valid ones are: folder, datasource...
Usage:
import -f path-to-file [-s servers-file | -h server...
但是,当我使用import.bat
ShellUtils.execute_cmd()
和JRuby执行,日志从来没有捕获错误消息,Invalid type. Valid ones are...
,我m只看到err日志的使用情况输出。我不明白为什么自使用和错误消息起源于import.bat
。我已经检查了两个out
和err
对象,它们都不包含错误字符串。
我只需要检测错误消息来向调用者发送进程失败的信号,但是如果在err日志中没有该字符串,就很难知道发生了什么。
尝试运行在DOS import.bat时重定向标准输出和标准错误(import.bat ...> o.txt 2> e.txt),它仍然显示什么? – 2012-04-19 16:17:33
是的,我在'e.txt'中看到错误信息'Invalid type ...',用法在'o.txt'中。 – raffian 2012-04-19 16:26:59
@VictorMoroz那个测试证明了什么?我对Ruby很有新意,所以对此有所了解,thx – raffian 2012-04-19 17:00:52