Pourquoi les arguments sont-ils correctement interprétés par la commande system alors que ce n'est pas le cas par exec ?
Ça ne devrait pas être le cas... En tous cas, sur Unix, tout se passe comme prévu (arg.bat ne reeçoit que deux arguments à chaque fois).
C'est certainement un effet de bord de la manière dont 'exec' est simulé par Perl sur Windows.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
jl_morel
Dans l'article <f43vv4$1ri$, a dit...
[couic]
Pourquoi les arguments sont-ils correctement interprétés par la commande system alors que ce n'est pas le cas par exec ?
Comme Paul Gaborit l'a deviné, il s'agit d'un problème dû à l'émulation de exec sous Windows. Les guillemets sont retirés par cmd.exe.
Pour créer un process avec CreateProcess, Perl a besoin d'une ligne de commande complète (donc une chaîne et pas une liste). Il reconstitue cette ligne de commande à partir de la liste d'arguments d'exec.
Voir la fonction create_command_line dans win32.c : http://search.cpan.org/src/NWCLARK/perl-5.8.8/win32/win32.c
C'est cette fonction qui rajoute des guillemets en utilisant un algorithme heuristique... qui n'est pas parfait (voir les commentaires dans le code).
Dans l'article <f43vv4$1ri$1@shakotay.alphanet.ch>,
stephane.muller@laposte.net a dit...
[couic]
Pourquoi les arguments sont-ils correctement interprétés par la
commande system alors que ce n'est pas le cas par exec ?
Comme Paul Gaborit l'a deviné, il s'agit d'un problème dû à l'émulation de
exec sous Windows. Les guillemets sont retirés par cmd.exe.
Pour créer un process avec CreateProcess, Perl a besoin d'une ligne de
commande complète (donc une chaîne et pas une liste). Il reconstitue cette
ligne de commande à partir de la liste d'arguments d'exec.
Voir la fonction create_command_line dans win32.c :
http://search.cpan.org/src/NWCLARK/perl-5.8.8/win32/win32.c
C'est cette fonction qui rajoute des guillemets en utilisant un algorithme
heuristique... qui n'est pas parfait (voir les commentaires dans le code).
Pourquoi les arguments sont-ils correctement interprétés par la commande system alors que ce n'est pas le cas par exec ?
Comme Paul Gaborit l'a deviné, il s'agit d'un problème dû à l'émulation de exec sous Windows. Les guillemets sont retirés par cmd.exe.
Pour créer un process avec CreateProcess, Perl a besoin d'une ligne de commande complète (donc une chaîne et pas une liste). Il reconstitue cette ligne de commande à partir de la liste d'arguments d'exec.
Voir la fonction create_command_line dans win32.c : http://search.cpan.org/src/NWCLARK/perl-5.8.8/win32/win32.c
C'est cette fonction qui rajoute des guillemets en utilisant un algorithme heuristique... qui n'est pas parfait (voir les commentaires dans le code).
À (at) 06 Jun 2007 13:20:24 GMT, (Jean-Louis MOREL) écrivait (wrote):
Comme Paul Gaborit l'a deviné, il s'agit d'un problème dû à l'émulation de exec sous Windows. Les guillemets sont retirés par cmd.exe.
Pour créer un process avec CreateProcess, Perl a besoin d'une ligne de commande complète (donc une chaîne et pas une liste). Il reconstitue cette ligne de commande à partir de la liste d'arguments d'exec.
Voir la fonction create_command_line dans win32.c : http://search.cpan.org/src/NWCLARK/perl-5.8.8/win32/win32.c
C'est cette fonction qui rajoute des guillemets en utilisant un algorithme heuristique... qui n'est pas parfait (voir les commentaires dans le code).
Ce qui m'étonne quand même un peu dans cette histoire, c'est que les deux appels (system et exec) se comportent de manière différentes... alors qu'ils devraient être quand même très similaires.
Pourquoi l'appel 'system' reconstitue-t-il correctement la ligne de commande et pas 'exec' ?
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 06 Jun 2007 13:20:24 GMT,
jl_morel@bribes.org (Jean-Louis MOREL) écrivait (wrote):
Comme Paul Gaborit l'a deviné, il s'agit d'un problème dû à l'émulation de
exec sous Windows. Les guillemets sont retirés par cmd.exe.
Pour créer un process avec CreateProcess, Perl a besoin d'une ligne de
commande complète (donc une chaîne et pas une liste). Il reconstitue cette
ligne de commande à partir de la liste d'arguments d'exec.
Voir la fonction create_command_line dans win32.c :
http://search.cpan.org/src/NWCLARK/perl-5.8.8/win32/win32.c
C'est cette fonction qui rajoute des guillemets en utilisant un algorithme
heuristique... qui n'est pas parfait (voir les commentaires dans le code).
Ce qui m'étonne quand même un peu dans cette histoire, c'est que les
deux appels (system et exec) se comportent de manière
différentes... alors qu'ils devraient être quand même très similaires.
Pourquoi l'appel 'system' reconstitue-t-il correctement la ligne de
commande et pas 'exec' ?
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 06 Jun 2007 13:20:24 GMT, (Jean-Louis MOREL) écrivait (wrote):
Comme Paul Gaborit l'a deviné, il s'agit d'un problème dû à l'émulation de exec sous Windows. Les guillemets sont retirés par cmd.exe.
Pour créer un process avec CreateProcess, Perl a besoin d'une ligne de commande complète (donc une chaîne et pas une liste). Il reconstitue cette ligne de commande à partir de la liste d'arguments d'exec.
Voir la fonction create_command_line dans win32.c : http://search.cpan.org/src/NWCLARK/perl-5.8.8/win32/win32.c
C'est cette fonction qui rajoute des guillemets en utilisant un algorithme heuristique... qui n'est pas parfait (voir les commentaires dans le code).
Ce qui m'étonne quand même un peu dans cette histoire, c'est que les deux appels (system et exec) se comportent de manière différentes... alors qu'ils devraient être quand même très similaires.
Pourquoi l'appel 'system' reconstitue-t-il correctement la ligne de commande et pas 'exec' ?
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Stéphane Müller
Finallement, j'ai modifié comme ci-dessous mon code pour faire fonctionner correctement le exec: