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

Discussion in 'Ruby' started by Venks, Nov 27, 2007.

  1. Venks

    Venks Guest

    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 <>
    Date: Nov 27, 2007 3:58 PM
    Subject: How to redirect a "system" standard output to a variable
    To:


    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, Nov 27, 2007
    #1
    1. Advertising

  2. Venks

    Ilan Berci Guest

    Re: How to redirect a "system" standard output and standard

    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/.
     
    Ilan Berci, Nov 27, 2007
    #2
    1. Advertising

  3. Venks

    Phrogz Guest

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

    On Nov 27, 2:17 pm, 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.


    Google "ruby popen3" and "ruby popen4"
     
    Phrogz, Nov 27, 2007
    #3
  4. Venks

    Marc Heiler Guest

    Re: How to redirect a "system" standard output and standard

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

    I think the shortest and cleanest is

    require 'systemu'

    :)

    It is a bit similar to the popen3 one i think but easier IMHO
    --
    Posted via http://www.ruby-forum.com/.
     
    Marc Heiler, Nov 27, 2007
    #4
  5. Venks

    Guest

    Re: How to redirect a "system" standard output and standard

    On Nov 27, 1:55 pm, Marc Heiler <> wrote:
    > > To clarify further I want to capture any standard output or standard error.



    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.
     
    , Nov 28, 2007
    #5
  6. Venks

    Ken Bloom Guest

    Re: How to redirect a "system" standard output and standard errorto avariable (Linux)

    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
    > <> Date: Nov 27, 2007 3:58 PM
    > Subject: How to redirect a "system" standard output to a variable To:
    >
    >
    >
    > 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,


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

    --Ken

    --
    Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory.
    Department of Computer Science. Illinois Institute of Technology.
    http://www.iit.edu/~kbloom1/
     
    Ken Bloom, Dec 6, 2007
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Steven Reddie
    Replies:
    2
    Views:
    311
    Scott David Daniels
    Mar 7, 2005
  2. Holger Wirtz
    Replies:
    2
    Views:
    309
    Holger Wirtz
    Jun 21, 2005
  3. Will Lichtenberger
    Replies:
    3
    Views:
    3,234
    dener
    Nov 5, 2008
  4. Sal
    Replies:
    1
    Views:
    568
  5. Venks
    Replies:
    2
    Views:
    235
    Morton Goldberg
    Nov 28, 2007
Loading...

Share This Page