Hi, I am a newbie to ruby and want to execute a ruby file that is provided as input. I want to be able to redirect the output of the execution to a log file as well. I am basically looking at executing a test.rb file which could contain (Sample only) print "hello world" sum=2+3 print sum I tried kernel eval but will need to do this per line and also I am not able to access sum in the print in 3rd line. I also tried pipe open but then could not redirect the output to a file. Any help in this regard would be very helpful. Thanks, Sudhindra -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Mon, Mar 2, 2009 at 6:14 AM, Sudhi Kulkarni < rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > Hi, > > I am a newbie to ruby and want to execute a ruby file that is provided > as input. I want to be able to redirect the output of the execution to a > log file as well. > > I am basically looking at executing a test.rb file which could contain > (Sample only) > > print "hello world" > sum=2+3 > print sum > > I tried kernel eval but will need to do this per line and also I am not > able to access sum in the print in 3rd line. > > I also tried pipe open but then could not redirect the output to a file. > > Any help in this regard would be very helpful. > > Thanks, > Sudhindra > --http://lmgtfy.com/?q=execute+ruby+file Good luck, -Conrad --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
When you say it''s provided as input, where does this input come from? Users? If so, well... I really hope you know what you''re doing. --Michael On Mon, Mar 2, 2009 at 8:14 AM, Sudhi Kulkarni <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > Hi, > > I am a newbie to ruby and want to execute a ruby file that is provided > as input. I want to be able to redirect the output of the execution to a > log file as well. > > I am basically looking at executing a test.rb file which could contain > (Sample only) > > print "hello world" > sum=2+3 > print sum > > I tried kernel eval but will need to do this per line and also I am not > able to access sum in the print in 3rd line. > > I also tried pipe open but then could not redirect the output to a file. > > Any help in this regard would be very helpful. > > Thanks, > Sudhindra > -- > Posted via http://www.ruby-forum.com/. > > > >-- (Ruby, Rails, Random) blog: http://skandragon.blogspot.com/ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Michael Graff wrote:> When you say it''s provided as input, where does this input come from? > Users? If so, well... I really hope you know what you''re doing. > > --Michael > > > On Mon, Mar 2, 2009 at 8:14 AM, Sudhi Kulkarni > <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote: >> print "hello world" >> Thanks, >> Sudhindra >> -- >> Posted via http://www.ruby-forum.com/. >> >> > >> > > > > -- > (Ruby, Rails, Random) blog: http://skandragon.blogspot.com/Hi, Conrad, I was looking for executing from within a ruby file execution context and was not able to find good help when I googled for the information. Michael, Yes I know what kind of scripts would be provided, they would be pretty secure Looks like I can use load ''test.rb'' to execute the ruby file from another ruby program. How do I redirect the output to a file instead of stdout and stderr? Thanks, Sudhindra Thanks for the replies -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Mon, Mar 2, 2009 at 8:40 AM, Sudhi Kulkarni < rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > Michael Graff wrote: > > When you say it''s provided as input, where does this input come from? > > Users? If so, well... I really hope you know what you''re doing. > > > > --Michael > > > > > > On Mon, Mar 2, 2009 at 8:14 AM, Sudhi Kulkarni > > <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote: > >> print "hello world" > >> Thanks, > >> Sudhindra > >> -- > >> Posted via http://www.ruby-forum.com/. > >> > >> > > >> > > > > > > > > -- > > (Ruby, Rails, Random) blog: http://skandragon.blogspot.com/ > > Hi, > Conrad, I was looking for executing from within a ruby file execution > context and was not able to find good help when I googled for the > information. > Michael, Yes I know what kind of scripts would be provided, they would > be pretty secure > > Looks like I can use load ''test.rb'' to execute the ruby file from > another ruby program. How do I redirect the output to a file instead of > stdout and stderr? > > Thanks, > Sudhindra > Thanks for the repliesHi, you should be able to do the following: In file "a", I have the following: def a "Hello, " end In file "b", I have the following: def b "my name is " end In file "c", I have the following: require "a" require "b" if __FILE__ == $0 if ARGV.length == 1 puts "#{a}#{b}#{ARGV.first}" else puts "Usage: c < your_name >" end end end>> ruby c Sudhindra >& file.txtfile.txt contains: Hello, my name is Sudhindra Lastly, I would recommend reading about global constants in "Programming Ruby 1.8" or "Programming Ruby 1.9". Also, I would get a good reference on the Unix command set. Good luck, -Conrad --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Conrad Taylor wrote:> On Mon, Mar 2, 2009 at 8:40 AM, Sudhi Kulkarni < > rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote: > >> >> print "hello world" >> > -- >> another ruby program. How do I redirect the output to a file instead of >> stdout and stderr? >> >> Thanks, >> Sudhindra >> Thanks for the replies > > > Hi, you should be able to do the following: > > In file "a", I have the following: > > def a > "Hello, " > end > > In file "b", I have the following: > > def b > "my name is " > end > > In file "c", I have the following: > > require "a" > require "b" > > if __FILE__ == $0 > > if ARGV.length == 1 > > puts "#{a}#{b}#{ARGV.first}" > > else > > puts "Usage: c < your_name >" > > end > > end > > end > >>> ruby c Sudhindra >& file.txt > > file.txt contains: Hello, my name is Sudhindra > > Lastly, I would recommend reading about global constants in "Programming > Ruby 1.8" or "Programming Ruby 1.9". Also, I would get a good reference > on > the Unix > command set. > > Good luck, > > -ConradHi, May be I am not putting the question right. I want to have editor where I type in text(Ruby) and that is copied to a temp file for execution. Now within my editor which is also a ruby script I want to execute this file. So I call load ''temp.rb'' The problem is that this program executes fine but I am not able to capture the output into a file. Can I do something like load ''temp.rb >&output.txt ? ( This did not work so what should I do?) Thanks, Sudhindra -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hi Sudhindra, Depending on the needs/requirements of what you''re trying to do, you could probably get away with exec''ing your ruby file in a subshell and direct output as needed. Take a look at Kernel module backtics (http://www.ruby-doc.org/core/ classes/Kernel.html#M006001) and read up on various options regarding (sub)processes (altho old pickaxe book ... http://www.rubycentral.com/pickaxe/tut_threads.html). Simple example: $ cat sum.rb puts "#{ARGV[0].to_i} + #{ARGV[1].to_i} = #{ARGV[0].to_i + ARGV [1].to_i}" $ ruby sum.rb 4 5 4 + 5 = 9 $ irb> `ruby sum.rb 3 4 > sum_output.txt 2>&1`=> ""> res = IO.read(''sum_output.txt'')=> "3 + 4 = 7\n" Note however that using backtics you can directly capture the output of what was exec''d in the subshell if you want, instead of writing it to some file and then reading it back in:> res = `ruby sum.rb 3 4 2>&1`.chomp=> "3 + 4 = 7" That said, I second Michael''s hope-you-know-what-you''re-doing. Cheers, Jeff On Mar 2, 7:39 pm, Sudhi Kulkarni <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Conrad Taylor wrote: > > On Mon, Mar 2, 2009 at 8:40 AM, Sudhi Kulkarni < > > rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote: > > >> >> print "hello world" > >> > -- > >> another ruby program. How do I redirect the output to a file instead of > >> stdout and stderr? > > >> Thanks, > >> Sudhindra > >> Thanks for the replies > > > Hi, you should be able to do the following: > > > In file "a", I have the following: > > > def a > > "Hello, " > > end > > > In file "b", I have the following: > > > def b > > "my name is " > > end > > > In file "c", I have the following: > > > require "a" > > require "b" > > > if __FILE__ == $0 > > > if ARGV.length == 1 > > > puts "#{a}#{b}#{ARGV.first}" > > > else > > > puts "Usage: c < your_name >" > > > end > > > end > > > end > > >>> ruby c Sudhindra >& file.txt > > > file.txt contains: Hello, my name is Sudhindra > > > Lastly, I would recommend reading about global constants in "Programming > > Ruby 1.8" or "Programming Ruby 1.9". Also, I would get a good reference > > on > > the Unix > > command set. > > > Good luck, > > > -Conrad > > Hi, > > May be I am not putting the question right. I want to have editor where > I type in text(Ruby) and that is copied to a temp file for execution. > Now within my editor which is also a ruby script I want to execute this > file. So I call > > load ''temp.rb'' > > The problem is that this program executes fine but I am not able to > capture the output into a file. > > Can I do something like > > load ''temp.rb >&output.txt ? ( This did not work so what should I do?) > > Thanks, > Sudhindra > > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Just be VERY VERY careful when using back-ticks or any other form of Kernel.system(). For instance, since this is a Rails list, I assume you are using, well, Rails. Suppose you want to pass the input from a form to a subprocess. If you wrote: book = params[:book] cmd = "/usr/local/bin/doit #{book}" Kernel.system(cmd) you will have created a machine that will be "pwned" nearly instantly. A safer, but still not 100% safe, method is to use an array: cmd = [ "/usr/local/bin/doit", book ] Kernel.system(*cmd) Here are some examples of the differences: => "/bin/ls `foobar`">> Kernel.system(cmd)sh: foobar: command not found <-------- NOTE! Security hole! Compare to:>> cmd = ["/bin/ls", "`foobar`" ]=> ["/bin/ls", "`foobar`"]>> Kernel.system(*cmd)ls: `foobar`: No such file or directory <---- Note (good result) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Michael Graff wrote:> Just be VERY VERY careful when using back-ticks or any other form of > Kernel.system(). > > For instance, since this is a Rails list, I assume you are using, > well, Rails. Suppose you want to pass the input from a form to a > subprocess. If you wrote: > > book = params[:book] > cmd = "/usr/local/bin/doit #{book}" > Kernel.system(cmd) > > you will have created a machine that will be "pwned" nearly instantly. > > A safer, but still not 100% safe, method is to use an array: > > cmd = [ "/usr/local/bin/doit", book ] > Kernel.system(*cmd) > > Here are some examples of the differences: > > => "/bin/ls `foobar`" >>> Kernel.system(cmd) > sh: foobar: command not found <-------- NOTE! Security hole! > > Compare to: > >>> cmd = ["/bin/ls", "`foobar`" ] > => ["/bin/ls", "`foobar`"] >>> Kernel.system(*cmd) > ls: `foobar`: No such file or directory <---- Note (good result)Hi, Michael, Thanks for the inputs. You are right I am using it within rails. I dont intend to execute any system commands like ls etc. I would want to execute ruby script only, like calling some methods, some print commands and some control structures. Does kernel.system calls not need a new thread and is it handled in rails? Also how about using load or popen3? Dont these have any way of redirecting the output to a file? I am asking a lot of questions but I am still not clear which is the best method to use for executing the ruby scripts. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---