Forum: Ruby How to tell if script running under rubyw vs ruby?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
18a3f5cbba162d78a6c238115341134d?d=identicon&s=25 Joe Swatosh (Guest)
on 2008-05-10 20:00
(Received via mailing list)
I spent some time poking around in Config, but so far this is the the
only thing I've found that works:

begin
  puts 'this is a test'
  # here is ruby
rescue
  # here is rubyw
end

And I really don't love the side effect when using ruby.  Please tell
me there is a better way.

Thanks,
E1d641bfe4071a5413bac781f06d3fd1?d=identicon&s=25 Sean O'halpin (sean)
on 2008-05-10 21:46
(Received via mailing list)
On Sat, May 10, 2008 at 6:59 PM, Joe Swatosh <joe.swatosh@gmail.com>
wrote:
> And I really don't love the side effect when using ruby.  Please tell
> me there is a better way.
>
> Thanks,
> --
> Joe Swatosh
>
>
As you've found out, stdout doesn't work under rubyw because all three
usual streams (stdout, stdin and stderr) are closed in a Windows exe.
I don't have a Window box handy to test, but you could try checking
the value of STDOUT under rubyw - it's probably nil or something like
that or you may get .eof? == true. Only a heuristic, but should serve
to distinguish between your two use cases.

Regards,
Sean
7a561ec0875fcbbe3066ea8fe288ec77?d=identicon&s=25 Sebastian Hungerecker (Guest)
on 2008-05-11 10:28
(Received via mailing list)
Sean O'Halpin wrote:
> I don't have a Window box handy to test, but you could try checking
> the value of STDOUT under rubyw - it's probably nil or something like
> that or you may get .eof? == true.

Alternatively you could check for STDOUT.closed? or !STDOUT.tty?
One of those three should work at least.


HTH,
Sebastian
F1d6cc2b735bfd82c8773172da2aeab9?d=identicon&s=25 Nobuyoshi Nakada (nobu)
on 2008-05-11 17:07
(Received via mailing list)
Hi,

At Sun, 11 May 2008 02:59:07 +0900,
Joe Swatosh wrote in [ruby-talk:301402]:
> I spent some time poking around in Config, but so far this is the the
> only thing I've found that works:

It depends on what you want to know.  If it is

a) whether running with or without a console window, you can't
   open "CONIN$" and "CONOUT$" without it.

  begin
    open("CONIN$") {}
    # here is ruby
  rescue
    # here is rubyw
  end

b) whether running with opened STDIN/STDOUT/STDERR, STDIN.stat
   and so on fail with EBADF if it is not opened.

c) or, whether running executable is linked in GUI mode or CUI
   mode, you might have to parse the exe header.  (imagehlp.dll
   or something may be needed.)
18a3f5cbba162d78a6c238115341134d?d=identicon&s=25 Joe Swatosh (Guest)
on 2008-05-12 05:17
(Received via mailing list)
On Sun, May 11, 2008 at 8:06 AM, Nobuyoshi Nakada <nobu@ruby-lang.org>
wrote:
>   open "CONIN$" and "CONOUT$" without it.
>
> c) or, whether running executable is linked in GUI mode or CUI
>   mode, you might have to parse the exe header.  (imagehlp.dll
>   or something may be needed.)
>
> --
> Nobu Nakada
>
>

Thanks Sean.
I should have mentioned that testing for defined?, nil?, and eof?
weren't helpful.

Thanks Sebastian.
No joy on .tty? or .closed? either.

Nobu rocks again!
It is b)  We are using some gems that might puts or warn when they are
loaded, so when running under rubyw we are planning to redirect them
to a log file, but we don't want to mess with anything when running
under ruby.

Thanks again everyone.
This topic is locked and can not be replied to.