# How to redirect a "system" standard output to a variable

**URL:** <https://www.ruby-forum.com/t/how-to-redirect-a-system-standard-output-to-a-variable/121427>\
**Category:** Ruby\
**Created:** [November 27, 2007, 10:02pm UTC](https://www.ruby-forum.com/t/how-to-redirect-a-system-standard-output-to-a-variable/121427 "2007-11-27T22:02:07Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Venks](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/edb3f5/32.png) [@Venks](https://www.ruby-forum.com/u/Venks)\
**Post date:** [November 27, 2007, 10:02pm UTC](https://www.ruby-forum.com/t/how-to-redirect-a-system-standard-output-to-a-variable/121427/1 "2007-11-27T22:02:07Z")

</div>

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,

---

<div class="post-metadata">

**Author:** ![Venks](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/edb3f5/32.png) [@Venks](https://www.ruby-forum.com/u/Venks)\
**Post date:** [November 28, 2007, 12:20am UTC](https://www.ruby-forum.com/t/how-to-redirect-a-system-standard-output-to-a-variable/121427/2 "2007-11-28T00:20:58Z")

</div>

On Nov 27, 3:58 pm, Venks [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 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,

I use open4 for things like that. Try this it will show you how it  
works.  
[http://codeforpeople.com/lib/ruby/open4/](http://codeforpeople.com/lib/ruby/open4/)

# test.rb

require ‘rubygems’  
require ‘open4’

commands = [“rm somefile”,“ls”]  
commands.each do |command|  
status = Open4::popen4(command) do |pid,stdin,stdout,stderr|  
puts “Running command: #{command}\n\n”  
puts “pid:\n#{pid}”  
puts “\nstdout:\n#{stdout.read.strip}”  
puts “\nstderr:\n#{stderr.read.strip}”  
end  
puts “\nexitcode\n#{status.exitstatus}\n”  
puts “----------\n\n\n”  
end

$ ruby test.rb  
Running command: rm somefile

pid:  
11207

stdout:

stderr:  
rm: somefile: No such file or directory

## exitcode 1

Running command: ls

pid:  
11208

stdout:  
test.rb

stderr:

exitcode  
0

---

<div class="post-metadata">

**Author:** ![Venks](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/edb3f5/32.png) [@Venks](https://www.ruby-forum.com/u/Venks)\
**Post date:** [November 28, 2007, 9:03am UTC](https://www.ruby-forum.com/t/how-to-redirect-a-system-standard-output-to-a-variable/121427/3 "2007-11-28T09:03:43Z")

</div>

On Nov 27, 2007, at 3:58 PM, Venks wrote:

> begin  
> Thanks,  
> sys\_msg = `rm /Users/Desktop/foo.txt 2>&1`  
> sys\_msg # =\> “rm: /Users/Desktop/foo.txt: No such file or directory\n”

Regards, Morton
