ruby-talk / ruby-lang.org schrieb am 16.06.02 02:52:02:
> ke = IO.popen("cat","r+")
> loginCall = "blablabla\n" # cat needs \n at the end before it echoes back the line
> sysInfoCall = "fofofofo\n"
> 
> if (ke != nil)
>   ke.syswrite(loginCall)
> 
>   # #flush() is not needed if you use syswrite, as #flush only flushes
>   # ruby's internal buffering and ruby does not perform any buffering
>   # with syswrite and sysread
>   #ke.flush() 
> 
>   
>   # #each("\n") blocks until it finds \n or EOF.
>   #ke.each("\n") { |line| puts(line) }
> 
>   # if you don't know the number of lines to be read, then you have to use
>   # IO#select so your program does not block unnecessarily.
>   # alternatively if you now the number of lines to be read, just invoke
>   # #readline that many times.
>   puts ke.readline
>   
>   ke.syswrite(sysInfoCall)
>   #ke.flush() # ditto, syswrite does not require flush
>   
>   ke.close_write
> 
>   # the #each here works because the condition \n or EOF is true.
>   ke.each("\n") { |line| puts(line) }
> 
>   ke.close
> end

Thanks a lot for your response. Using IO.readline() instead of IO.each()  solved the problem !
Fortunatly I can identify the last line of a response String, which is returned by the system I ' m communicating with, so I  can do readline() until the last line is reached and write again after having collected and parsed  the previous response.

-- Carsten
 

______________________________________________________________________________
FreeMail in der Premiumversion! Mit mehr Speicher, mehr Leistung, mehr 
Erlebnis und mehr Pramie. Jetzt unter http://club.web.de/?mc=021105