Página 1 de 1

Parámetros

NotaPublicado: 2007-01-03 15:40 @694
por mpm_maru
Hola a Todos,

Me gustaría que me ayudaran, quisiera saber como se pueden mandar parámetros a otro script que se llama a través de la función system...

ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
system('c:/KPI/pasantia/Scrips/detalle.pl');
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


De verdad les agradecería mucho si me ayudasen

gracias

NotaPublicado: 2007-01-03 16:44 @739
por explorer
Pues...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
system("programa.pl","argumento1","argumento2");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2007-01-03 16:47 @741
por creating021
No se como sea en Windows pero puede que esto...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
use strict;
system('exec c:\KPI/pasantia/Scrips/detalle.pl parámetro');
if($? == -1){
  die "No se pudo ejecutar $!\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¿Por qué no usas open, puede funcionar?

NotaPublicado: 2007-01-03 17:39 @777
por Perl user
creating021 escribiste:No se como sea en Windows pero puede que esto...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
use strict;
system('exec c:\KPI/pasantia/Scrips/detalle.pl parámetro');
if($? == -1){
  die "No se pudo ejecutar $!\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¿Por qué no usas open, puede funcionar?


Al contrario... tu solución no tiene que ver con un sistema, estás generando 2 procesos por cada system.

system() genera una nueva imagen de proceso y exec genera otra nueva imagen de proceso sobreescribiendo la actual (incluyendo el stack).

La solución mas correcta y la mas "portable" es la que da explorer arriba. Utilizar system( @args ).

Independientemente de que tu solución funcione... no es la mas eficiente y sobre todo no es portable.

Saludos,

Saludos,

NotaPublicado: 2007-01-03 18:13 @800
por creating021
Cierto, pero lo de exec tiene una razón y es el mal que tengo:
Cuando ejecutas algo en Unix (ls, make, mv, rm...) usualmente haces un system con el nombre del programa (el path ya está en sistema exportado por Bash, sh, csh...) pero cuando es el X path uso exec o depende del programa lo uso (Al ver tengo que leer perldoc).

Pero, que tal si sólo se usa exec de esta forma:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $path = '/bin/lo_que_sea';
exec $path '-args';
exec {'lo_que_sea} '-args';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Mhh, veo que exec y system es lo mismo.
¿Cúal sería la mejor forma, system(@rray) o exec(@args)?
:shock:

NotaPublicado: 2007-01-04 11:28 @519
por Perl user
creating021 escribiste:Cierto, pero lo de exec tiene una razón y es el mal que tengo:
Cuando ejecutas algo en Unix (ls, make, mv, rm...) usualmente haces un system con el nombre del programa (el path ya está en sistema exportado por Bash, sh, csh...) pero cuando es el X path uso exec o depende del programa lo uso (Al ver tengo que leer perldoc).

Pero, que tal si sólo se usa exec de esta forma:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $path = '/bin/lo_que_sea';
exec $path '-args';
exec {'lo_que_sea} '-args';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Mhh, veo que exec y system es lo mismo.
¿Cúal sería la mejor forma, system(@rray) o exec(@args)?
:shock:


Que tal,

En mi post anterior te expliqué ya la diferencia.

system() genera un nuevo proceso y ejecuta el comando dado SIN reemplazar la imagen de proceso actual (la ejecución del programa actual en Perl).

exec() Es una llamada al sistema que ejecuta el comando dado reemplazando la imagen de proceso actual con la del comando a ejecutar (es decir, en la tabla de procesos del sistema operativo, los datos de la ejecución actual son sobreescritos por el proceso a ejecutar, pila, direcciones, file descriptors, etc).

Ambos tienen su uso.

Saludos,