Ruby 1.9内核::系统无法在Windows上运行

时间:2010-10-12 05:57:40

标签: ruby windows-7

我在我的ruby脚本中使用system "java -cp xxx.jar",它在Mac OS上运行良好。但是当我在Windows 7 x64上运行脚本时,那些java -cp xxx.jar没有被执行,也没有报告错误。

2 个答案:

答案 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