I still have a lot to learn about Ruby, but here's a Ruby script that runs a series of system commands (Kernel.system()), which in my case means calling a series of JRuby scripts. I send all of the output from this script and from the system calls to a file by (a) writing directly to the file using Ruby and (b) redirecting STDOUT when making each system() call. I think this is a hack, but I can't find a better way to redirect STDOUT.
#
# a ruby script to run a series of system calls,
# and put their output into one file.
#
# Alvin Alexander, DevDaily.com
#
# the output file for your scripts:
@filename = "scripts.out"
# the list of scripts you want to run:
scripts_to_run = [ 'foo1.rb',
'foo2.rb'
]
# --------------------------------
# don't change anything below here
# --------------------------------
def write_to_file (s)
f = File.open(@filename,'a')
f.puts s
f.close
end
def get_formatted_time
t = Time.now
t_out = t.strftime("%H:%M:%S%p (%m/%d/%Y)")
end
scripts_to_run.each { |s|
write_to_file "\nCalling #{s} at #{get_formatted_time} ..."
system("jruby.bat #{s} >> #{@filename}")
write_to_file "Script ended at #{get_formatted_time}."
}
You can adjust this to your own needs by changing the system() call near the end of the file. As mentioned I'm calling a series of JRuby scripts, but you'll probably want to call something else.
As I mentioned this is a hack, because I can't figure out how to properly redirect STDOUT when making a system call, so I took this approach to get the job done today. This lets me write to the same output file using the write_to_file method, while also redirecting STDOUT from the program I'm calling using the standard ">>" syntax.
I also add some time formatting and printing to the output file, so the actual output looks like this when I run it on my Windows system:
C:\Al\RobotStuff\Tests>type scripts.out Calling foo1.rb at 12:02:58PM (01/27/2007) ... foo1 Script ended at 12:02:59PM (01/27/2007). Calling foo2.rb at 12:02:59PM (01/27/2007) ... foo2 Script ended at 12:03:01PM (01/27/2007).

