Contenido

annotate-output

Contenido

A menudo me sorprendo con pequeñas utilidades poco conocidas pero muy interesantes.

Tal es el caso de annotate-output

Tips

Instalación de annotate-output

Es una pequeña utilidad que se encuentra en el paquete debian devscripts, por lo que su instalación es tan simple como:

1
  apt-get install devscripts

Para qué sirve

Como su propio nombre indica, pone notas en la salida. Estas notas son la fecha y el tipo de salida utilizada (stdin , stdout o stderr). Por ejemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    $ ls
    appveyor.yml       dodo.py           output/                         setup.cfg
    AUTHORS.txt        foo/              python_dateutil-2.2-py2.7.egg/  setup.py*
    bower_components/  LICENSE.txt       README.rst                      tests/
    bower.json         logo/             requirements-extras.txt         translations/
    CHANGES.txt        MANIFEST.in       requirements-tests.txt          venv/
    CONTRIBUTING.rst   nikola/           requirements.txt
    docs/              Nikola.egg-info/  scripts/

    $ annotate-output ls
    17:07:57 I: Started ls
    17:07:57 O: appveyor.yml
    17:07:57 O: AUTHORS.txt
    17:07:57 O: bower_components
    17:07:57 O: bower.json
    17:07:57 O: CHANGES.txt
    17:07:57 O: CONTRIBUTING.rst
    17:07:57 O: docs
    17:07:57 O: dodo.py
    17:07:57 O: foo
    17:07:57 O: LICENSE.txt
    17:07:57 O: logo
    17:07:57 O: MANIFEST.in
    17:07:57 O: nikola
    17:07:57 O: Nikola.egg-info
    17:07:57 O: output
    17:07:57 O: python_dateutil-2.2-py2.7.egg
    17:07:57 O: README.rst
    17:07:57 O: requirements-extras.txt
    17:07:57 O: requirements-tests.txt
    17:07:57 O: requirements.txt
    17:07:57 O: scripts
    17:07:57 O: setup.cfg
    17:07:57 O: setup.py
    17:07:57 O: tests
    17:07:57 O: translations
    17:07:57 O: venv
    17:07:57 I: Finished with exitcode 0

Como se puede observar, indica la hora y añade una O para la salida, una I para mensajes de información. Además añadiría una E para la salida de error:

1
2
3
4
    $ annotate-output ls /foo
    17:09:54 I: Started ls /foo
    17:09:54 E: ls: no se puede acceder a /foo: No existe el fichero o el directorio
    17:09:54 I: Finished with exitcode 2

Por qué me parece tan interesante

En algunos casos puede ser importante cuánto tarda en ejecutar algún paso:

  • Tareas lentas
  • Tareas con mucha salida
  • Tareas en background
  • Salida de cron
  • Mensajes de nuestro entorno de integración contínua (Jenkins, Travis, …) o ejecuciones de Make en general.

Sabiendo la hora de ejecución podemos inferir muchas cosas: Cuánto tardó en ejecutar cierto paso, la hora de un error, … O, simplemente, filtrar a posteriori la salida de error con un simple grep.

¿Para qué más sirve?

Siguiendo la filosofía Unix, “pequeñas herramientas que hacen una tarea y la hacen bien”, ésta es su utilidad. A parte de poder cambiar el formato de la fecha, no permite hacer nada más.