From: "matled (Matthias Lederhofer)" Date: 2012-04-08T18:46:21+09:00 Subject: [ruby-core:44188] [ruby-trunk - Bug #6269] Process.spawn does not work with Tempfile Issue #6269 has been updated by matled (Matthias Lederhofer). 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. ---------------------------------------- Bug #6269: Process.spawn does not work with Tempfile https://bugs.ruby-lang.org/issues/6269#change-25716 Author: matled (Matthias Lederhofer) Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux] 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] -- http://bugs.ruby-lang.org/