Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.ruby > #7339

Re: How to flush stdin to popen3 without closing it?

From Robert Klemme <shortcutter@googlemail.com>
Newsgroups comp.lang.ruby
Subject Re: How to flush stdin to popen3 without closing it?
Date 2017-02-26 18:42 +0100
Message-ID <ehgid3F3dm4U1@mid.individual.net> (permalink)
References <8760jwkiyv.fsf@filestore.home.gustad.com>

Show all headers | View raw


On 26.02.2017 17:36, Petter Gustad wrote:
>
> It seems like stdin must be closed for popen3 to send stdin to the
> sub-process. How can I do something like this:
>
>    require 'open3'
>
>    stdin, stdout, stderr, wait_thr = Open3.popen3("dc")
>    stdin.puts "1 2 + p"
>    stdin.flush # does not not help
>    stdin.close # without this it will just hang on the read
>    res = stdout.read
>    puts "1+2 is #{res}"
>    #stdin.reopen # is it possible to re-open the stdin somehow?
>    stdin.puts "#{res} 2 * p"
>    stdin.close
>    res = stdout.read
>    puts "(1+2)*2 is #{res}"
>    ...
>
> Is there a way to flush or re-open stdin? Is there some other variation
> of popen3 which can be used?

You are missing one important point: stdout.read must block until dc 
closes its output because there is no limit set on the read amount.  And 
that will only happen if dc's input has been closed because, obviously, 
dc needs to be able to write results as long as input is coming.  If you 
replace that line with

res = stdout.gets

it will work the way you expect.  You could also use stdout.sync=true to 
avoid to have to use #flush all the time.

http://ruby-doc.org/core-2.4.0/IO.html#method-i-sync-3D

Kind regards

	robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Back to comp.lang.ruby | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

How to flush stdin to popen3 without closing it? Petter Gustad <newsmailcomp6@gustad.com> - 2017-02-26 17:36 +0100
  Re: How to flush stdin to popen3 without closing it? Robert Klemme <shortcutter@googlemail.com> - 2017-02-26 18:42 +0100
    Re: How to flush stdin to popen3 without closing it? Petter Gustad <newsmailcomp6@gustad.com> - 2017-02-26 22:46 +0100
      Re: How to flush stdin to popen3 without closing it? Robert Klemme <shortcutter@googlemail.com> - 2017-02-26 22:53 +0100

csiph-web