From: nobu@... Date: 2015-01-24T22:53:11+00:00 Subject: [ruby-core:67797] [ruby-trunk - Bug #10781] [Rejected] stdout flushing and loops Issue #10781 has been updated by Nobuyoshi Nakada. Description updated Status changed from Open to Rejected [doc of `IO#eof?`](http://www.rubydoc.info/stdlib/core/IO#eof%3F-instance_method): > If _ios_ is a stream such as pipe or socket, `IO#eof?` > blocks until the other end sends some data or closes it. This is true for a console device, and > Note that `IO#eof?` reads data to the input byte buffer. ---------------------------------------- Bug #10781: stdout flushing and loops https://bugs.ruby-lang.org/issues/10781#change-51208 * Author: Nolan Eakins * Status: Rejected * Priority: Normal * Assignee: * ruby -v: 1.9.3p547 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- I'm making a little program that has a shell like command prompt. Something like: ~~~ $ cmd Cmd out $ more More out $ ~~~ I tried the following code, but the second prompt does not get flushed to my terminal after entering an initial command: ~~~ruby begin $stdout.write("$ ") $stdout.flush $stdout.puts($stdin.gets.inspect) end until $stdin.closed? || $stdin.eof? ~~~ My output looks like: ~~~ $ input "input\n" more $ "more\n" ~~~ But if I write my code like the following, my prompt works but I can't wrap my prompter in a method: ~~~ruby $stdout.print('$ ') $stdout.flush begin $stdout.puts($stdin.gets.inspect) $stdout.print('$ ') $stdout.flush end until $stdin.closed? || $stdin.eof? end ~~~ What exactly is the problem here? I've tried a 1.8 and 1.9.3p547. -- https://bugs.ruby-lang.org/