From: Bauduin Raphael Date: 2004-12-18T22:32:10+09:00 Subject: Re: rubyqt, popen problem in a log viewer Hi, Thanks for the tip about QProcess, I'll experiment with it later. For the time being, I've implemented nobu nokada's suggestion. I still have the problem refreshing the widget though.... With this code: Thread.new("/tmp/test") do |f| begin tail = IO.popen("/usr/bin/tail -f #{f}","r") while line = tail.gets hello.append line.chomp puts line.chomp end ensure puts "killing #{tail.pid}" Process.kill("INT", tail.pid) tail.close end end the while loops (updating the widget AND printing line in the terminal) seems to be run only when activity occurs in the window (click, entering window). How comes the line is printed in the terminal only when activity occurs in the window? Thanks for your help Raph Richard Dale wrote: > Richard Dale wrote: > >>You could start 'tail' with a Qt::Process instead of popen(), as it ties >>in with Qt signals/slots > > >>and shuts down the sub process on application >>exit > > Actually I'm wrong - Qt doesn't do this, you need to connect to the > 'aboutToQuit()' application signal, and kill the 'tail' process on exit: > > @proc = Qt::Process.new(self) { > addArgument "/usr/bin/tail" > addArgument "-f" > addArgument "/tmp/test" > } > > connect( @proc, SIGNAL('readyReadStdout()'), > self, SLOT('readFromStdout()') ) > > connect( $kapp, SIGNAL('aboutToQuit()'), > self, SLOT('shutdown()') ) > @proc.start > end > > slots 'readFromStdout()', 'shutdown()' > > def readFromStdout > lines = @proc.readStdout > @hello.append lines.to_s > end > > def shutdown > @proc.kill > end > > -- Richard