Bug #6269
closed
Process.spawn does not work with Tempfile
Added by matled (Matthias Lederhofer) over 12 years ago.
Updated over 12 years ago.
Description
The following code fails with an exception:
require 'tempfile'
tmp = Tempfile.new(File.basename($0))
Process.spawn("date", :out => tmp)
Exception: in `spawn': wrong exec redirect action (ArgumentError)
I would expect that Process.spawn accepts a Tempfile object just as a File or
IO object.
check_exec_redirect fails to detect that a Tempfile object may be used as an
IO. I guess check_exec_redirect_fd should be called even if the object is not
of type T_FILE.
I've tried the following ruby versions:
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux]
ruby 2.0.0dev (2012-04-07 trunk 35250) [x86_64-linux]
:in, :out and :err expects path. Please try Process.spawn("date", :out => tmp.path)
ssuda (Sambasiva Suda) wrote:
:in, :out and :err expects path or fd. Please try Process.spawn("date", :out => tmp.path) or Process.spawn("date", :out => tmp.to_i)
I find it a bit inconsistent that a Tempfile object is not supported,
as, for example, this code works without a problem:
Process.spawn("date", :out => File.open(tmp.path, "w"))
That is, it is supported to pass an IO/File object directly, without
calling #fileno to pass the file descriptior itself. There is also
already code in check_exec_redirect_fd that tries to get a T_FILE object
by calling "to_io". Tempfile would happily provide an IO object if
#to_io would be called. I think it would be more user friendly if
#to_io would be called on the object before throwing an error, so user
defined classes, that do not directly inherit from IO, can be used too
without an extra method call.
- Status changed from Open to Assigned
- Assignee set to nobu (Nobuyoshi Nakada)
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r36551.
Matthias, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
process.c: try conversion at redirection
- io.c (rb_io_check_io): make public.
- process.c (check_exec_redirect): try conversion to IO on redirect
parameters. [ruby-core:44181] [Bug #6269]
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0