¿Cómo puedo redirigir stderr y stdout a un archivo para un script en Ruby?

InformationsquelleAutor AOO | 2010-06-10

4 Comentarios

  1. 61

    De dentro de un script en Ruby, usted puede redirigir stdout y stderr con el IO#a abrir método.

    # a.rb
    $stdout.reopen("out.txt", "w")
    $stderr.reopen("err.txt", "w")
    
    puts 'normal output'
    warn 'something to stderr'
    $ ls 
    una.rb 
    $ ruby una.rb 
    $ ls 
    una.rb err.txt out.txt 
    $ cat err.txt 
    algo a stderr 
    $ cat out.txt 
    normal de salida 
    
    • ¿Cómo puede el normal $stdout ser restaurado de nuevo después?
    • ¿por qué utilizar reabrir el método ? es decir que si «out.txt» no existe, será creado?
    • Echa un vistazo a esta respuesta sobre cómo restaurar $stdout después.
    • Usted necesitará $stdout.sync = true y $stderr.sync = true si la esperanza de, digamos, la cola el archivo, mientras que las líneas están siendo escritas. De lo contrario, las líneas no ser escrita hasta que el proceso se cierra, o alguna otra cosa, como que los vaciados de los arroyos.
  2. 13

    Nota: la reapertura de los flujos estándar a /dev/null es un buen método para ayudar a un proceso para convertirse en un demonio. Por ejemplo:

    # daemon.rb
    $stdout.reopen("/dev/null", "w")
    $stderr.reopen("/dev/null", "w")
    • ¿Qué entiende usted por «ayudar a un proceso de convertirse en un demonio»?
    • En UNIX con el fin de hacer un programa en un demonio, el programador debe no sólo a la horquilla en segundo plano, pero también redirigir los flujos de e / s estándar. Está usted familiarizado con esto?
    • Nota: Si utiliza el incorporado en Process.daemon se puede hacer esto para usted. Consulte docs aquí.
  3. 5
    ./yourscript.rb 2>&1 > log.txt

    va a redirigir stdout y stderr en el mismo archivo.

    • Suponiendo que se ejecutan en *nix
    • Creo que > funciona en Windows – no estoy seguro acerca de 2> aunque.
    • Esto funcionará en windows también.
    • Esta respuesta también se hace suposiciones acerca de lo que shell está utilizando el usuario, incluso dentro de *nix. Algunas de las conchas tienen diferentes redirección de estilos, por ejemplo, el comportamiento predeterminado de zsh.

Dejar respuesta

Please enter your comment!
Please enter your name here