Ich habe ein Skript, das FFmpeg auf meinem lokalen Rechner imitieren soll, indem Sie den Befehl an einen Remote-Rechner senden, es dort ausführen und dann die Ergebnisse zurückgeben. (siehe previous stackoverflow question.)Wie zeige ich Fortschrittsbalken von einem Shell-Befehl über ssh
#!/usr/bin/env ruby
require 'rubygems'
require 'net/ssh'
require 'net/sftp'
require 'highline/import'
file = ARGV[ ARGV.index('-i') + 1] if ARGV.include?('-i')
puts 'No input file specified' unless file;
host = "10.0.0.10"
user = "user"
prod = "new-#{file}" # product filename (call it <file>-new)
rpath = "/home/#{user}/.rffmpeg" # remote computer operating directory
rfile = "#{rpath}/#{file}" # remote filename
rprod = "#{rpath}/#{prod}" # remote product
cmd = "ffmpeg -i #{rfile} #{rprod}"# remote command, constructed
pass = ask("Password: ") { |q| q.echo = false } # password from stdin
Net::SSH.start(host, user) do |ssh|
ssh.sftp.connect do |sftp|
# upload local 'file' to remote 'rfile'
sftp.upload!(file, rfile)
# run remote command 'cmd' to produce 'rprod'
ssh.exec!(cmd)
# download remote 'rprod' to local 'prod'
sftp.download!(rprod, prod)
end
end
jetzt mein Problem ist bei
ssh.exec!(cmd)
ich die cmd der Ausgabe an dem lokalen Benutzer in Echtzeit angezeigt werden soll. Aber macht es
puts ssh.exec!(cmd)
Ich werde nur die resultierende Ausgabe nach dem Befehl beendet hat ausgeführt wird. Wie müsste ich den Code ändern, damit dies funktioniert?
ein Fortschrittsbalken würde immer noch nicht korrekt angezeigt werden? Recht? – Stefan