Question

J'obtiens un comportement inattendu en utilisant POPEN3, que je veux utiliser pour exécuter une commande comme l'outil Ala cmd < file1 > file2. L'exemple ci-dessous est suspendu, de sorte que stdout done n'est jamais atteint. Utiliser d'autres outils que cat peut provoquer la suspension, pour que stdin done n'est jamais atteint. Je soupçonne que je souffre de mémoire tampon, mais comment puis-je résoudre ce problème?

#!/usr/bin/env ruby

require 'open3'

Open3.popen3("cat") do |stdin, stdout, stderr, wait_thr|
  stdin.puts "foobar"

  puts "stdin done"

  stdout.each_line { |line| puts line }

  puts "stdout done"

  puts wait_thr.value
end

puts "all done"

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top