From: Robert Klemme Date: 2008-08-01T02:19:22+09:00 Subject: Re: Input redirection in ruby On 31.07.2008 16:10, Michal Suchanek wrote: > I could not find any way to redirect input and output of programs in ruby. > > You can capture the fds but not redirect AFAICT. You can - and it's pretty easy also. The key feature to know is IO#reopen: robert@fussel ~ $ rm x robert@fussel ~ $ ./ro.rb foo 1 foo 2 robert@fussel ~ $ head x insgesamt 4319 drwx------+ 22 robert Kein 0 Feb 17 16:27 Anwendungsdaten drwx------+ 2 robert Kein 0 Jul 27 23:24 Cookies drwx------+ 12 robert Kein 0 Jul 27 14:18 Desktop drwx------+ 2 robert Kein 0 Aug 18 2004 Druckumgebung drwx------+ 17 robert Kein 0 Apr 20 12:14 Eigene Dateien drwx------+ 5 robert Kein 0 Feb 8 19:58 Favoriten drwx------+ 6 robert Kein 0 Sep 17 2006 Lokale Einstellungen -rwx------+ 1 robert Kein 4194304 Jul 27 12:07 NTUSER.DAT drwx------+ 2 robert Kein 0 Mar 24 18:05 Netzwerkumgebung robert@fussel ~ $ cat ro.rb #!/bin/env ruby puts "foo 1" fork do STDOUT.reopen("x", "w") exec "ls", "-l" end puts "foo 2" robert@fussel ~ $ Alternatively you can use the shell's redirection feature when invoking system with one argument only: robert@fussel ~ $ ruby -e 'system "ls -l > xx"' robert@fussel ~ $ head xx insgesamt 4323 drwx------+ 22 robert Kein 0 Feb 17 16:27 Anwendungsdaten drwx------+ 2 robert Kein 0 Jul 27 23:24 Cookies drwx------+ 12 robert Kein 0 Jul 27 14:18 Desktop drwx------+ 2 robert Kein 0 Aug 18 2004 Druckumgebung drwx------+ 17 robert Kein 0 Apr 20 12:14 Eigene Dateien drwx------+ 5 robert Kein 0 Feb 8 19:58 Favoriten drwx------+ 6 robert Kein 0 Sep 17 2006 Lokale Einstellungen -rwx------+ 1 robert Kein 4194304 Jul 27 12:07 NTUSER.DAT drwx------+ 2 robert Kein 0 Mar 24 18:05 Netzwerkumgebung robert@fussel ~ $ Cheers robert