Ich habe nächsten Codepopen3 hängt, wenn Skript mit popen3 Ausführung
def execute_bash(cmd)
puts "Executing: [#{cmd}]"
exit_code = Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
stdin.close
stdout.each { |line| puts line }
stdout.close
stderr.each { |line| puts line }
stderr.close
wait_thr.value.exitstatus
end
return exit_code
end
Befehl, den ich mit dieser Funktion laufe vagrant oben ist, die eine Menge Ausgabe erzeugt. Ich habe viele Rezepte, daher muss ich die Ausgabe in Echtzeit zeilenweise überwachen.
Und ich habe ein anderes Skript, das dafür sorgt, dass das vorherige Skript gut gelaufen ist und nicht abstürzte. Also habe ich ein anderes Skript, das Bash-Befehle auf die gleiche Weise wie zuvor ausführt. Also ich bin wie Laufen (im zweiten Skript):
Eine solche Konsequenz führt mich zu Dead-Lock oder etwas: in einigen Punkt endet der Ausgang. Ich könnte eine Menge Zeit warten, aber es wird nicht fortgesetzt.
Wenn ich nur Vagabund in der Konsole laufen - alles ist in Ordnung.
Ist das ein Problem, Ruby-Skript mit popen3 in einem anderen popen3 ausführen? Gibt es in popen3 die richtige Methode, um tote Sperren zu handhaben (wenn es tot ist, bin ich mir nicht sicher)?
Leider Umleitung stderr hat nicht geholfen. Konnten dieselben Deadlocks mit der Funktion system() auftreten? – GALIAF95