Lun Sep 22, 2008 4:02 am
|
 |
miguialberto
Perlero Nuevo

|
Registrado: 28 Jul 2008
Mensajes: 28
|
|
| Guardar resultado con system() |
|
|
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! |
|
|
|
Lun Sep 22, 2008 4:40 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
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(). |
|
Lun Sep 22, 2008 4:43 am
|
 |
miguialberto
Perlero Nuevo

|
Registrado: 28 Jul 2008
Mensajes: 28
|
|
|
|
|
| Muchas gracias, me funciona perfectamente. |
|
Sab Oct 11, 2008 7:33 pm
|
 |
RockoX
Perlero Nuevo

|
Registrado: 20 Ago 2008
Mensajes: 10
|
|
|
|
|
Bueno yo estoy empezando en Perl, pero creo que sería así:
La salida del DIR se va hacia el archivo "archivo.txt". |
|
Sab Oct 11, 2008 8:20 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Sab Oct 11, 2008 10:38 pm
|
 |
RockoX
Perlero Nuevo

|
Registrado: 20 Ago 2008
Mensajes: 10
|
|
|
|
|
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. |
|

Dom Oct 12, 2008 7:14 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|
Dom Oct 12, 2008 9:47 am
|
 |
RockoX
Perlero Nuevo

|
Registrado: 20 Ago 2008
Mensajes: 10
|
|
|
|
|
| Gracias, duda aclarada. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|