* Steven, on 18.06.2010 18:23:
I am calling a ruby program from a python gui and using
subprocess.Popen in Windows XP using python 2.6.  Unfortunately,
whenever the ruby program is called a blank command window appears on
screen, annoying my users.  Is there a way to suppress this behaviour?

Yes, launch the GUI subsystem Ruby interpreter.


<example of="finding that beast">
C:\projects\blog\cppx\exception_translation\examples> set pathe
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.CJS;.JS;.JSE;.WSF;.WSH;.RB;.RBW

C:\projects\blog\cppx\exception_translation\examples> assoc .rb
.rb=rbFile

C:\projects\blog\cppx\exception_translation\examples> ftype rbfile
rbfile="C:\progra...@utilities\ruby\bin\ruby.exe" "%1" %*

C:\projects\blog\cppx\exception_translation\examples> assoc .rbw
.rbw=rbwFile

C:\projects\blog\cppx\exception_translation\examples> ftype rbwfile
rbwfile="C:\progra...@utilities\ruby\bin\rubyw.exe" "%1" %*

C:\projects\blog\cppx\exception_translation\examples> _
</example>


OK, it's called 'rubyw.exe'.

You can read about console and GUI subsystem for the complete beginner programmer at <url: http://tinyurl.com/programmingbookP3>, ch. 1 (hope I got the URL right).


Below is a minimal program that demonstrates the problem.  The problem
does not manifest if the python program is launched via the command
line.  To duplicate launch from Windows Explorer by double-clicking on
the python file.

--- call_double.pyw ---
from subprocess import *
import time

time.sleep(3) # to show that command window is result of call to Popen
p = Popen(['ruby.exe', 'double.rb'], stdin=PIPE, stdout=PIPE,
stderr=PIPE)

Change this to 'rubyw.exe' when running in Windows.

Note that that it's perfectly OK to pipe to or from a GUI subsystem program.


results = open('results.txt', 'w')
for n in range(10):
     p.stdin.write("%d\n" % n)
     result = p.stdout.readline().strip()
     results.write('double(%s) =>  %2s\n' % (n, result))
results.close()

--- end of call_double.pyw ---

--- double.rb ---
while true
     puts $stdin.gets().strip!.to_i * 2
     STDOUT.flush
end


Cheers & hth.,

- Alf

--
blog at <url: http://alfps.wordpress.com>
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to