Skip to content

Instantly share code, notes, and snippets.

@mziwisky
Last active November 9, 2020 02:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mziwisky/2fe40ba44d9996718a18a158f1b7200a to your computer and use it in GitHub Desktop.
Save mziwisky/2fe40ba44d9996718a18a158f1b7200a to your computer and use it in GitHub Desktop.
proxying I/O from one script to another
#!/usr/bin/env ruby
require 'open3'
puts 'party time'
output = ''
status = Open3.popen2e('./sub.rb') do |std_in, std_out_err, wait_thr|
Thread.new do
begin
while out = std_out_err.readpartial(64)
print(out); STDOUT.flush
output += out
end
rescue EOFError
end
std_out_err.close
end
Thread.new do
while input = STDIN.readpartial(64)
output += input
std_in.write(input)
end
std_in.close
end
wait_thr.value.exitstatus
end
puts "Output: #{output}"
puts "Status: #{status}"
#!/usr/bin/env ruby
# this is important! I don't know of a way that it could be set
# from main.rb, e.g. if you only had control of main.rb and not sub.rb
STDOUT.sync = true
puts "it's a test!"
loop do
print "gimme something (q to quit)> "
x = gets.chomp
puts "you gave me #{x}"
exit if x == 'q'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment