Bug #6269
closedProcess.spawn does not work with Tempfile
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]
Updated by ssuda (Sambasiva Suda) over 12 years ago
:in, :out and :err expects path. Please try Process.spawn("date", :out => tmp.path)
Updated by ssuda (Sambasiva Suda) over 12 years ago
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)
Updated by matled (Matthias Lederhofer) over 12 years ago
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.
Updated by mame (Yusuke Endoh) over 12 years ago
- Status changed from Open to Assigned
- Assignee set to nobu (Nobuyoshi Nakada)
Nobu has a patch. I know.
--
Yusuke Endoh mame@tsg.ne.jp
Updated by nobu (Nobuyoshi Nakada) about 12 years ago
- 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]