Hice un script en python que se comunica con un servidor web mediante un bucle infinito.
Quiero registro de todas las comunicaciones de datos a un archivo y también el monitor de ellos desde la terminal al mismo tiempo. así que he usado tee comando como este.

python client.py | tee logfile

sin embargo, no tengo nada de terminal ni el archivo de registro.
la secuencia de comandos de python está trabajando bien.
¿qué está ocurriendo aquí?
me estoy perdiendo algo?

algunos de los consejos que se agradece.
gracias de antemano.

  • El búfer se comporta de forma diferente para las tuberías y terminales. Puede que necesite hacer explícito sys.stdout.flush() de la secuencia de comandos cada vez que se registra una línea.
  • Para otras formas de activar sin búfer de salida consulte stackoverflow.com/q/107705/1328439
InformationsquelleAutor daehee | 2014-02-09

1 Comentario

  1. 144

    De man python:

       -u     Force stdin, stdout and stderr to  be  totally  unbuffered.   On  systems
              where it matters, also put stdin, stdout and stderr in binary mode.  Note
              that there is internal buffering in xreadlines(), readlines()  and  file-
              object  iterators  ("for  line  in sys.stdin") which is not influenced by
              this option.  To work around this, you will want to use  "sys.stdin.read‐
              line()" inside a "while 1:" loop.

    Entonces lo que puedes hacer es:

    /usr/bin/python -u client.py >> logfile 2>&1

    O el uso de tee:

    python -u client.py | tee logfile
    • gracias me agregue en la parte superior: #!/usr/bin/python -u
    • Una alternativa sería el uso de script, que también deshabilita el almacenamiento en búfer y, además, hace que las secuencias de control (C-a, teclas de cursor, etc) trabajo: stackoverflow.com/a/39269661/15690.
    • excelente! se trabajó también en Python 3 en mi Raspberry Pi 3 equipado con Raspbian Jessie: python3 -u client.py | tee logfile
    • Nota: python, al igual que varios otros comandos de uso de la línea de búfer si stdin y stdout son las consolas, pero lleno de búfer si los resultados se redirige a un archivo o una tubería. tee es visto como un tubo (que lo es) y no el híbrido: es escribir en la consola. Nota: el comportamiento también puede ser controlada dentro de un programa en python.
    • Otra nota: python -u client.py | tee >> logfile no iba a funcionar. El >> introduciría otro caso de búfer de escritura a un archivo. Eso es lo que tee -a resuelve.

Dejar respuesta

Please enter your comment!
Please enter your name here