Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Guardar resultado con system()

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Lun Sep 22, 2008 4:02 am
miguialberto
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Jul 2008
Mensajes: 28
Guardar resultado con system() Responder citando

Buenas de nuevo.

Creo que este problema lo he leído ya resuelto en algún lado, pero no lo encuentro. Quería saber cómo puedo guardar la salida de una llamada a "system()". Por ejemplo, si uso system() para hacer un "dir" de un directorio, querría que se me guardara el resultado de todos los directorios listados en un string, de manera que luego los pudiera consultar.

¡Gracias!
Mensaje Lun Sep 22, 2008 4:40 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

Debes usar qx(), en lugar de system(), que solo te da el resultado de la ejecución.

De todas formas, para leer un directorio, yo usaría opendir(), readdir() y closedir().
Mensaje Lun Sep 22, 2008 4:43 am
miguialberto
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Jul 2008
Mensajes: 28
Responder citando

Muchas gracias, me funciona perfectamente.
Mensaje Sab Oct 11, 2008 7:33 pm
RockoX
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Ago 2008
Mensajes: 10
Responder citando

Bueno yo estoy empezando en Perl, pero creo que sería así:
Perl:
system("dir > archivo.txt");


La salida del DIR se va hacia el archivo "archivo.txt".
Mensaje Sab Oct 11, 2008 8:20 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español, RockoX.

Gracias por la apreciación, RockoX, pero miguialberto pedía guardar la salida de la ejecución del comando en una variable escalar, no en un fichero externo.

Para eso se suele usar qx():
Perl:
my $directorio = qx( dir );
o las comillas invertidas (``) que es lo mismo.
Mensaje Sab Oct 11, 2008 10:38 pm
RockoX
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Ago 2008
Mensajes: 10
Responder citando

Disculpen, no leí bien. Una pregunta: ¿esto sería correcto, guardar la salida del comando "dir" en una variable?
Perl:
#!/usr/bin/perl
my $directorio = system("dir /b");
printf $directorio;


Otra cosa, cuando ejecuto el script, me da esta salida:
Código:
Code.pl
Code.vpd
0


Pero ¿qué significa el 0 en la última línea, el grado de error?

Pongo esto en la línea de comandos y me sigue dando un 0:
Código:
perl code.pl & echo %errorlevel%


Y ahora me da esta salida en la consola :
Código:
Code.pl
Code.vpd
00


Esa es básicamente mi pregunta, por qué me devuelve un 0.
Mensaje Dom Oct 12, 2008 7:14 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

system() devuelve el resultado de la ejecución de la operación, así que de ahí viene el cero. No estás guardando la salida del comando. Solo estás guardando un cero. Si ves la salida del comando en pantalla es porque no estás capturando nada y la salida sale por la salida estándar (la consola).

Y otro detalle... no es lo mismo print() que printf(). El segundo requiere de un parámetro con el formato de salida.
Mensaje Dom Oct 12, 2008 9:47 am
RockoX
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Ago 2008
Mensajes: 10
Responder citando

Gracias, duda aclarada.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group