# Uh oh. In a corner. Need help

**URL:** <https://www.ruby-forum.com/t/uh-oh-in-a-corner-need-help/98784>\
**Category:** Ruby\
**Created:** [July 18, 2006, 5:42am UTC](https://www.ruby-forum.com/t/uh-oh-in-a-corner-need-help/98784 "2006-07-18T05:42:45Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![xmg-eric](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/f04885/32.png) [@xmg-eric](https://www.ruby-forum.com/u/xmg-eric)\
**Post date:** [July 18, 2006, 5:42am UTC](https://www.ruby-forum.com/t/uh-oh-in-a-corner-need-help/98784/1 "2006-07-18T05:42:45Z")

</div>

My rakefile needs to abort when an html  
file can’t be parsed into REXML, so I  
can report the error and fix it. But…

Running tidy in a subshell, I can find  
no way to access the error message it  
sends to std error. I can see it, but  
is there a way to get ruby to see it?

This idiom doesn’t seem to work

```
sh "tidy ... > file" do |ok, res|
  if !ok then
    # Never runs
  end
end

```

The “result” is an empty string. Std out  
goes to the file, as expected, but std  
error does not go to res.

Trying to run htree instead, I have some  
strange “.so not found” error that I  
posted last week, but am unable to decipher  
on my own. (Of necessity, ruby is in a  
non-standard location, and that seems to be  
causing difficulties.)

I need a workaround, or a different strategy.

---

<div class="post-metadata">

**Author:** ![xmg-eric](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/f04885/32.png) [@xmg-eric](https://www.ruby-forum.com/u/xmg-eric)\
**Post date:** [July 18, 2006, 6:25am UTC](https://www.ruby-forum.com/t/uh-oh-in-a-corner-need-help/98784/2 "2006-07-18T06:25:24Z")

</div>

On Jul 17, 2006, at 11:39 PM, Eric A. wrote:

> ```
> end
> 
> ```
> 
> end

You can redirect stderr to a file:

tidy … \> file 2\> errlog

Maybe that will get you going in the right direction.

---

<div class="post-metadata">

**Author:** ![xmg-eric](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/f04885/32.png) [@xmg-eric](https://www.ruby-forum.com/u/xmg-eric)\
**Post date:** [July 18, 2006, 9:18am UTC](https://www.ruby-forum.com/t/uh-oh-in-a-corner-need-help/98784/3 "2006-07-18T09:18:12Z")

</div>

Eric A. wrote:

> My rakefile needs to abort when an html  
> file can’t be parsed into REXML, so I  
> can report the error and fix it. But…
> 
> Running tidy in a subshell, I can find  
> no way to access the error message it  
> sends to std error. I can see it, but  
> is there a way to get ruby to see it?  
> You can:

- Use open3, which gives you access to stderr.  
([http://ruby-doc.org/stdlib/libdoc/open3/rdoc/index.html](http://ruby-doc.org/stdlib/libdoc/open3/rdoc/index.html))

- Use ruby-tidy, which wraps the tidy library and gives you exceptions  
when things go wrong. ([http://rubyforge.org/projects/tidy](http://rubyforge.org/projects/tidy))

- Redirect stderr in your shell command. (“tidy … \> file 2\> errors”)

I’ve used the second method quite successfully. It’s dead simple, but  
you’ve got to be careful about different Ruby threads using the library.  
It’s quite easy to make it go pop unless you wrap it in a critical  
section.

---

<div class="post-metadata">

**Author:** ![xmg-eric](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/f04885/32.png) [@xmg-eric](https://www.ruby-forum.com/u/xmg-eric)\
**Post date:** [July 19, 2006, 12:05am UTC](https://www.ruby-forum.com/t/uh-oh-in-a-corner-need-help/98784/4 "2006-07-19T00:05:19Z")

</div>

Thanks, Alex. And you, too, “gwtmp01”.  
Cripes. I never knew about “2\>”! That’s  
the easiest solution, in this case.

I appreciate the additional information,  
as well. They give me some alternatives  
to examine.

You guys saved the day! Thanks much.
