significa rails que metodos funciones ejemplos def ruby expect

rails - que significa en ruby



¿Hay una gema equivalente esperada para Ruby? (6)

¿Hay una gema equivalente esperada para Ruby?

Intenté buscar en code.google y rubygems.org, pero lamentablemente no apareció.

FYI: Expect es una herramienta de automatización y prueba de Unix, escrita por Don Libes como una extensión del lenguaje de scripting Tcl, para aplicaciones interactivas como telnet, ftp, passwd, fsck, rlogin, tip, ssh y otras.


Compruebe esto rubygem: https://github.com/abates/ruby_expect . Podría manejar alguna pequeña tarea para ti. a partir de su ejemplo oficial, es suficiente para ''ingresar contraseña'' e iniciar sesión e interactuar con el script local.

Aquí hay un ejemplo que actualiza el código git (que se autentica con contraseña):

require ''rubygems'' require ''ruby_expect'' def update_code password = ''your password here'' exp = RubyExpect::Expect.spawn(''git pull'', :debug => true) exp.procedure do each do expect /password: / do send password end end end end update_code

solo ejecuta el código de arriba, y verás así:

$ ruby update_code.rb [email protected]??.net''s password: remote: Counting objects: 133, done. remote: Compressing objects: 100% (84/84), done. remote: Total 85 (delta 62), reused 0 (delta 0) Unpacking objects: 100% (85/85), done.

Para más ejemplos y detalles, por favor sumérjase en su código fuente.


Parece que expect4r hace lo que está pidiendo, aunque está hecho específicamente para conexiones a dispositivos Cisco y Juniper.

Quizás aún mejor sea yax ya que esto es "otra expectativa".


Recientemente pasé bastante tiempo luchando con este problema (estoy atascado con 1.8.7). Encontré esta question , esta publicación de blog y este hilo de foro realmente útiles.

Al final, este es el código de mi aplicación, si alguien está interesado en un pequeño ejemplo (pase la contraseña a rpm al firmar paquetes):

def run_interactive command, password, promt output = '''' begin r, w, pid = PTY.spawn(command) puts r.expect(promt) sleep(0.5) w.puts(password) begin r.each { |l| output += l } rescue Errno::EIO end $?.exitstatus Process.wait(pid) rescue PTY::ChildExited => e $stderr.puts "The child process #{e} exited! #{$!.status.exitstatus}" end output end password = "mypassword" command = "rpm --define ''_signature gpg'' --define ''_gpg_name #{key_id}'' --addsign #{package}" promt = %r{.*: } expected = %r{good} output = run_interactive(command, password, promt) if output.match(expected) puts output else abort "Error: expected: ''#{expected}'' got ''#{output}''" end

Tiene poca comprobación de errores, pero era todo lo que necesitaba.

Edición: actualice el código con Process.wait(pid) para asegurarse de que finaliza antes de continuar y agregue un comentario sobre este para 1.8.7.


Ruby viene con el módulo PTY para configurar pseudoterminales para manejar aplicaciones de línea de comandos interactivas. Con esto viene un método de expect que le permite interactuar con una aplicación como Expect. Para aprender a usar expectativa, encontré útil " ¿Qué esperar de la biblioteca de Ruby expect? ".

En lo que se refiere a las gemas, tal vez a la salida de los greenletters que se supone que deben mejorar en PTY + espera (aunque yo no lo he probado).


RExpect

Desde la página web del proyecto:

RExpect es un reemplazo del módulo expect.rb en la biblioteca estándar que es más rápido y más robusto, capaz de manejar muchos dispositivos simultáneamente.


parley es otro que puedes probar, (escrito por mí). Está inspirado en Perl espera.