JRubyからDOSコマンドを実行するために、open3を使用してRubyでヘルパーメソッドを作成しました...
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...
しかし、JRubyimport.bat
を使用して実行するShellUtils.execute_cmd()
と、ログにエラー メッセージが記録Invalid type. Valid ones are...
されず、使用状況の出力がエラー ログに表示されるだけです。使用法とエラー メッセージが に由来するため、その理由がわかりませんimport.bat
。out
とオブジェクトの両方をチェックしましたがerr
、どちらにもエラー文字列が含まれていません。
プロセスの失敗を呼び出し元に通知するエラー メッセージを検出する必要があるだけですが、エラー ログにその文字列がないと、一体何が起こっているのかを知ることは困難です。