# IO.popen

**URL:** <https://www.ruby-forum.com/t/io-popen/192580>\
**Category:** Ruby\
**Created:** [August 2, 2010, 3:58pm UTC](https://www.ruby-forum.com/t/io-popen/192580 "2010-08-02T15:58:17Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [August 2, 2010, 3:58pm UTC](https://www.ruby-forum.com/t/io-popen/192580/1 "2010-08-02T15:58:17Z")

</div>

I assume the doc’s are “just wrong” when they say you can access an  
IO.popen with any mode you’d like?

[http://ruby-doc.org/core/classes/IO.html#M002242](http://ruby-doc.org/core/classes/IO.html#M002242)

> > IO.popen(“gocr”, “rw”)  
> > ArgumentError: invalid access mode rw

Is this expected?  
-r

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [August 2, 2010, 4:23pm UTC](https://www.ruby-forum.com/t/io-popen/192580/2 "2010-08-02T16:23:14Z")

</div>

Roger P. wrote:

> I assume the doc’s are “just wrong” when they say you can access an  
> IO.popen with any mode you’d like?
> 
> [class IO - RDoc Documentation](http://ruby-doc.org/core/classes/IO.html#M002242)
> 
> > > IO.popen(“gocr”, “rw”)  
> > > ArgumentError: invalid access mode rw
> 
> Is this expected?

Yes. It doesn’t say “any mode you’d like”; it says “any of the modes  
listed in the description for class IO” - that is, any _valid_ mode 🙂

You’re probably looking for mode “r+” or “a+”

[http://ruby-doc.org/core/classes/IO.html](http://ruby-doc.org/core/classes/IO.html)

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [August 2, 2010, 4:26pm UTC](https://www.ruby-forum.com/t/io-popen/192580/3 "2010-08-02T16:26:30Z")

</div>

Hello Roger,

> [class IO - RDoc Documentation](http://ruby-doc.org/core/classes/IO.html#M002242)
> 
> > > IO.popen(“gocr”, “rw”)  
> > > ArgumentError: invalid access mode rw

When I want to read and write from the IO.popen’ed command, I use

IO.popen(cmd, “r+”)

but I do not remember from which source I found I had to use “r+”  
rather than the more expected “rw”

Cheers,
