How to print stdout immediately?

后端 未结 2 624
情深已故
情深已故 2021-01-11 09:51

How can I immediately output stdout? stdout is going to print after all input is complete.

require \'open3\'
def run(cmd)
    Open3         


        
2条回答
  •  囚心锁ツ
    2021-01-11 10:17

    Ruby is buffering output until the output buffer is full. To change the behavior so it automatically writes use sync and sync=:

    old_sync = $stdout.sync
    $stdout.sync = true
    
    puts "immediately output lotsa stuff"
    puts "immediately output lotsa stuff"
    puts "immediately output lotsa stuff"
    puts "immediately output lotsa stuff"
    
    # reenable the default behavior
    $stdout.sync = old_sync
    

    From the documentation for sync=:

    Sets the “sync mode” to true or false. When sync mode is true, all output is immediately flushed to the underlying operating system and is not buffered internally.

    It's important to understand that enabling automatic flushing of the buffer can actually slow the overall execution speed of your code, especially if you're writing to a file or device that wants to receive its data in chunks. Use sync or flushing carefully.

提交回复
热议问题