How to redirect a "system" standard output and standard error to a variable (Linux)

To clarify further I want to capture any standard output or standard error.

Thanks,

···

---------- Forwarded message ----------
From: Venks <venkatesh.mantha@gmail.com>
Date: Nov 27, 2007 3:58 PM
Subject: How to redirect a "system" standard output to a variable
To: ruby-talk@ruby-lang.org

Hi,

I need to redirect any standard output thrown when using a system call into
a Ruby variable. I tried to search for a solution but couldn't find anything
that worked. May be I am not using the right search terms.

Here is what I am trying to do.

begin

  `rm somefile`

end

If "somefile" doesn't exist the OS throws the message "rm: cannot remove
`somefile': No such file or directory" which I want to capture into a
variable.

Thanks,

Venks wrote:

To clarify further I want to capture any standard output or standard
error.

irb(main):001:0> r = `rm somefile 2>&1`
=> "rm: cannot remove `somefile': No such file or directory\n"

ilan

···

--
Posted via http://www.ruby-forum.com/\.

Google "ruby popen3" and "ruby popen4"

···

On Nov 27, 2:17 pm, Venks <venkatesh.man...@gmail.com> wrote:

Note: parts of this message were removed by the gateway to make it a legal Usenet post.

To clarify further I want to capture any standard output or standard error.

You need to use popen3, because the message is printed on standard error,
not standard out.

--Ken

···

On Tue, 27 Nov 2007 16:17:30 -0500, Venks wrote:

Note: parts of this message were removed by the gateway to make it a
legal Usenet post.

To clarify further I want to capture any standard output or standard
error.

Thanks,

---------- Forwarded message ---------- From: Venks
<venkatesh.mantha@gmail.com> Date: Nov 27, 2007 3:58 PM
Subject: How to redirect a "system" standard output to a variable To:
ruby-talk@ruby-lang.org

Hi,

I need to redirect any standard output thrown when using a system call
into a Ruby variable. I tried to search for a solution but couldn't find
anything that worked. May be I am not using the right search terms.

Here is what I am trying to do.

begin

  `rm somefile`

end

If "somefile" doesn't exist the OS throws the message "rm: cannot remove
`somefile': No such file or directory" which I want to capture into a
variable.

Thanks,

--
Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/

To clarify further I want to capture any standard output or standard error.

I think the shortest and cleanest is

require 'systemu'

:slight_smile:

It is a bit similar to the popen3 one i think but easier IMHO

···

--
Posted via http://www.ruby-forum.com/\.

I was dealing with this myself today. Here is the solution came
across which works for me. I'm combining the stderr with stdout from
the system call. You can remove the exitcode stuff if you dont need
it.

IO.popen("ls nofile 2>&1") {|f|
     output = f.read
     exitcode = Process.waitpid2(f.pid)[1] >> 8
     puts "this is the output"
     puts output
     puts "this is the exit code"
     puts exitcode
   }

#./test.rb
this is the output
nofile: No such file or directory
this is the exit code
2

   HTH. G.

···

On Nov 27, 1:55 pm, Marc Heiler <sheve...@linuxmail.org> wrote:

> To clarify further I want to capture any standard output or standard error.