From: Jeremy Bopp Date: 2010-10-08T04:07:02+09:00 Subject: Re: popen hangs out for user input On 10/7/2010 1:40 PM, felix.leg wrote: > Hi, > > I want to use Ruby with latex,so I wrote a simple program which waits > for "\typein" command called from pdflatex: > > > #!/usr/bin/ruby > > file = IO.popen('pdflatex -interaction scrollmode test.tex','r+') #1 > > until file.readline.include? 'typein'; end > file.write "a line from RUBY" > file.readlines #2 > file.close > > > If I run the command from #1 in a sheel it works right: scrolls > "standard" latex asks, and stops for my "\@typein=". After I answer it > continues normally. > > But when I want do the same in Ruby with above code, it hangs out > waiting for input. It looks like #2 causes this, but I don't know why... It's probably because the write buffer for the pipe is not being flushed. My preferred option to fix this sort of thing is to make the file object synchronous: file = IO.popen(.....) file.sync = true However, you might prefer to explicitly flush things instead: file.write(.....) file.flush ... file.write(.....) file.write(.....) file.flush -Jeremy