bwv549 <jtprince / gmail.com> wrote: > I'm doing some work with pymol and having trouble getting all the > pymol output out: > > # I open it in quiet/commandline mode with a pipe: > IO.popen("pymol -cq -p", 'w+') do |pipe| > pipe.puts "load file.pdb, mymodel\n" > pipe.puts "run my_script.py" > # this command will generate a whole bunch of output to stdout > pipe.puts "my_script mymodel" > sleep(5) # <--- this is what I have to do in order to get the > output > pipe.close_write > output = pipe.read > end > > What is annoying is that unless I sleep for 2-5 seconds I don't get > output or (even worse) my output is cut off. There has to be a way > besides arbitrarily sleeping to ensure that the command is finished. > I've tried things like piping in "quit", but that doesn't seem to > work. Anybody know how to solve this? I'm happy to use a different > approach if it means I can be sure I get all of my output out. -- > Thanks! Hi, I don't know about pymol, but some apps do not respond well to having its stdin closed on it with close_write. pipe.read should just block until you get output, otherwise put an IO.select([pipe) in front of it. Does this work? IO.popen("pymol -cq -p", 'w+') do |pipe| pipe.puts "load file.pdb, mymodel\n" pipe.puts "run my_script.py" pipe.puts "my_script mymodel" # IO.select([pipe]) # you shouldn't need to uncomment this... output = pipe.read end -- Eric Wong