Getting Ruby to output a windows command to text (log) file

Hey folks, I’m trying to create a program to ping one of my company’s
computers every minute to measure latency, and output the results to a
text file. I’ve been able to figure out / cobble together most of what
I need (see attached ping.rb file) but the problem i’m having is I
cannot figure out how to get Ruby to copy the results from the ping to
the text file that is created.

What I get currently when I run the program (from the log file):


Wed Sep 17 13:52:45 -0500 2008
System Ping Monitor:

Wed Sep 17 13:52:45 -0500 2008


The “ping” command doesn’t output the way I need it to, HALP!!

If you need to also get at stderr … take a look at popen3

ilan

Tony Mcneil wrote:


Wed Sep 17 13:52:45 -0500 2008
System Ping Monitor:

Wed Sep 17 13:52:45 -0500 2008


The “ping” command doesn’t output the way I need it to, HALP!!

See http://www.ruby-doc.org/core/classes/Kernel.html#M006001 :

cmd => string

Returns the standard output of running cmd in a subshell. The built-in
syntax %x{…} uses this method. Sets $? to the process status.

date #=> “Wed Apr 9 08:56:30 CDT 2003\n”
ls testdir.split[1] #=> “main.rb”
echo oops && exit 99 #=> “oops\n”
$?.exitstatus #=> 99

gegroet,
Erik V.

Erik V. wrote:

See http://www.ruby-doc.org/core/classes/Kernel.html#M006001 :

cmd => string

Returns the standard output of running cmd in a subshell. The built-in
syntax %x{�} uses this method. Sets $? to the process status.

date #=> “Wed Apr 9 08:56:30 CDT 2003\n”
ls testdir.split[1] #=> “main.rb”
echo oops && exit 99 #=> “oops\n”
$?.exitstatus #=> 99

gegroet,
Erik V.

hrm, I’ve tried looking over the documentation in the link you
provided, but I’m having difficulty understanding it. Could you provide
an example of the code?

thanks again,
~Tony

Tony Mcneil wrote:

Erik V. wrote:

See http://www.ruby-doc.org/core/classes/Kernel.html#M006001 :

cmd => string

hrm, I’ve tried looking over the documentation in the link you
provided, but I’m having difficulty understanding it. Could you provide
an example of the code?

thanks again,
~Tony

This won’t work (even when you remove the typo .to_S):
f.puts system(‘ping 192.168.1.74’).to_S

The ping will be executed, but you are logging if it succeeded, not the
output.
Erik is pointing to a working solution:

f.puts ping 192.168.1.74

Note these `` are backticks, not single quotes.

hth,

Siep

Thanks much Erik! I still need to study that link / see if I can figure
out exactly what that means, but that should work perfectly, thanks
again!

This won’t work (even when you remove the typo .to_S):
f.puts system(‘ping 192.168.1.74’).to_S

The ping will be executed, but you are logging if it succeeded, not the
output.
Erik is pointing to a working solution:

f.puts ping 192.168.1.74

Note these `` are backticks, not single quotes.

hth,

Siep

Thank you! that was the bit that made the difference (backtick instead
of quote) The .to_S was more of an experiment that I forgot to pull
immediately :slight_smile:

thanks for all your help everyone!