Archivo

Entradas Etiquetadas ‘estándar’

Utilizar la salida de error en PHP

Viernes, 7 de Enero de 2011 Gaspar Fernández 2 comentarios

Casi siempre, PHP es un lenguaje utilizado para la web y no para programas de consola o escritorio; aunque tenemos la posibilidad de utilizarlo para esos propósitos.

Y es que si estamos familiarizados con PHP y tenemos muchas bibliotecas de clases/funciones en ese lenguaje, a menudo querremos utilizarlo para otros propósitos.

Como sabemos, cuando queremos sacar texto por pantalla desde un programa tenemos la salida estándar y la salida de error (stdout, stderr); desde PHP podemos utilizar de forma fácil la salida estándar con las funciones habituales (echo, printf, print, print_r, etc). Pero para aprovechar la salida de error tendremos que recurrir a un recurso especial php://stderr, éste se comporta como un fichero donde la información que escribamos en él se dirigirá a la salida de error.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

function echoerr($txt)
{
  file_put_contents('php://stderr', $txt);
}

function echoerr2($txt)
{
  $e=fopen('php://stderr', 'w');
  fwrite($e, $txt);
  fclose($e);
}

echo "Hola mundo!\n";
echoerr("Hola error!\n");
echoerr2("Hola error, parte II\n");
?>

Como vemos, podemos utilizarlo con cualquier función que escriba en un archivo, como por ejemplo file_put_contents() o abriéndolo con fopen() y escribiendo en el archivo.

En la salida podemos ver que escribimos en stderr:

gaspy@local ~/proyectos/poesiabinaria $ php stdout.php
Hola mundo!
Hola error!
Hola error, parte II
# ——- Aquí vemos la salida completa ————-
gaspy@local ~/proyectos/poesiabinaria $ php stdout.php > hola
Hola error!
Hola error, parte II
# ——- Sólo vemos el error, la salida estándar está redirigida a un archivo.
gaspy@local ~/proyectos/poesiabinaria $ cat hola
Hola mundo!
# ——- Vemos el archivo con la salida estándar solamente.

Control-D para terminar la entrada estándar (EOF stdin)

Viernes, 16 de Abril de 2010 Gaspar Fernández Sin comentarios

A veces, con muchos comandos, por ejemplo sort, tail, cat, read, o muchos otros programas que leen datos de un fichero que luego procesan, tenemos la necesidad de utilizarlos con la entrada estándar del sistema, ya sea para hacer una prueba rápida, evitar tener que escribir un fichero o cualquier otra cosa.

Pero podemos estar introduciendo texto para esos comandos de forma indefinida:

$sort
estrella
mar
troglodita
alienígena
carpa
kiosko
gatillo

¿La forma de dejar de introducir texto? Control-D es un EOF de la stdin para el comando en cuestión que estemos ejecutando.

Eso sí, Control-D, también vale para cerrar la sesión, y si nos aficionamos mucho a utilizarlo, tal vez nos llevemos algún disgusto si la pulsamos cuando no debemos. Para ello podemos escribir en el terminal:

$ set -o ignoreeof

Así cuando pulsemos Control-D a destiempo nos dirá que para cerrar el shell escribamos exit.
Por supuesto esta línea anteriormente descrita podemos escribirla en ~/.bashrc y no tendremos que escribirla más.

Categories: Linux Tags: , , , , , ,

Visita otras webs de la red