我在我的ruby脚本中使用system "java -cp xxx.jar"
,它在Mac OS上运行良好。但是当我在Windows 7 x64上运行脚本时,那些java -cp xxx.jar
没有被执行,也没有报告错误。
答案 0 :(得分:1)
system
不会抛出异常或任何事情(这可能就是您说“没有报告错误”的原因)。
因此,您需要检查java
中是否有PATH
;默认情况下,在Windows上,它不是,您需要将JDK的bin
目录添加到PATH
。
答案 1 :(得分:1)
如果在类路径中使用多个java类而不是“;”(分号)在Windows中使用“;”(分号),则无法执行脚本;
classpath_separator = RUBY_PLATFORM =~ /mswin/ ? ';' : ':'
如果你想捕获系统命令的输出,你可以使用下一个代码:
def run_cmd cmd, cmd_name = 'Command'
# save current STDOUT reference
default_stdout = STDOUT.dup
# temp file used to capture output of the child processes
# and avoid conflicts between several processes running at the same time
# (temp file has a unique name and will be cleaned after close)
tmp_file = Tempfile.new 'tmp'
cmd_output = ''
puts "Begin #{cmd_name}: #{cmd}"
begin
# redirect default STDOUT to the tempfile
$stdout.reopen tmp_file
# execute command
system "#{cmd} 2>&1"
ensure
# read temp file content
tmp_file.rewind
cmd_output = tmp_file.read
tmp_file.close
# restore default STDOUT
$stdout.reopen default_stdout
end
# push output to console
puts "Output of #{cmd_name}: #{cmd_output}"
puts "End #{cmd_name}"
cmd_output
end