From: unbewust Date: 2007-08-10T22:04:58+09:00 Subject: Re: stderr stdout redirection with Ruby ??? On 10 ao�t, 13:26, "Ronald Fischer" wrote: > > i do have a shell script doing : > > > `man "#{arg}" 2> "#{tmp}/#{fm}" PIPE man2html > "#{tmp}/#{f1}"` > > > because i want to know if there is "No manual entry for "#{arg}"" > > > then for the time being i'm using an tmp file "#{tmp}/#{fm}" which i > > read after to know i i get the message : > > > "No manual entry for "#{arg}"" > > > i'm sure there is a more elegant way doing that in Ruby, avoiding > > shelling, BUT HOW TO ? > > If you want to do it completely within Ruby, you could first slurp the > output of man into a Ruby variable, i.e. > > man_page=%x(man #{arg}) > > and if it is OK, i.e. > > if man_page.length > 0 > ... > send this as stdin into man2html, i.e. something like: > > to_html=IO.popen("man2html >#{f1}","w") > to_html.print(man_page) > to_html.close > > From a logical point of view, this solution has the advantage > that you don't overwrite your file f1 if the man page does not exist. > > For a simpler solution (a bit dirty, but less keystrokes), you might > consider > the following idea, which however *does* use a shell: > > error_message=%x[(man #{arg}|man2html >#{f1}) 2>&1] > > After this, error_message contains whatever man and/org man2html spilled > out onto stderr, but f1 is always overwritten (even if there is no man > page). OK, fine thanks, in fact f1 is never overwritten the way i use it ... thanks a lot !