[PERL] execution de programme externe

execution de programme externe [PERL] - PHP - Programmation

Marsh Posté le 18-04-2002 à 15:11:38    

hello,
 
bon je vais faire en sorte de pas rentrer dans le top des posts a la con....
 
Voici mon probleme, je fais essayer d'etre bref et clair....
 
Je dois ressortir pas mal de données d'une base de données, la dedans je recupere le nom d'une image.
cette image doit subir un traitement, puis etre deplaceé vers un autre répertoire....
 
donc je sors mes données, je recupere l'image, jusqu'ici ok
le deplacement ok....
 
mais comment je fais pour executer le programme externe ??
 
le programme est un executable, son role, ouvrir l'image, recolorier l'avant et l'arriere plan, coller un digimarc etc...
il fait tout tout seul, donc pas besoin que je m'emmerde a coder ces taches en perl.
 
Je souhaiterais que le programme Perl s'execute, s'arrete un moment, execute le .exe et reparte tranquillement....
 
j'ai trouvé une commande :
system(truc.exe- tralala)
 
mais cela ne fonctionne pas...
 
je comprend pas... pour commencer, le chemin d'acces au programme, faut que je mette le chemin entier ?? (style C:/test/toudu/truc.exe ou je peux m'en sortir avec des ../../truc.exe
 
si une ame charitable pouvait m'aider...
 
@+
cadou
PS : des liens, pages explicatives, script pratique etc... serait egalement appréciée au cas ou la personne n'aurait pas le temps de me faire un roman sur cette question....

Reply

Marsh Posté le 18-04-2002 à 15:11:38   

Reply

Marsh Posté le 18-04-2002 à 15:27:02    

Essaie plutôt  
system("truc.exe -tralala" );
 
avec les guillemets quoi :)  
Pour le chemin tu programmes, tu peux mettre le chemin complet, ou relatif, comme tu veux.
 
Tu peux aussi faire ça :
`truc.exe -tralala`;
 
le caractère qui ressemble à une quote n'en ai pas une, mais la touche AltGr-7

Reply

Marsh Posté le 18-04-2002 à 15:31:46    

je te jure, je l'ai essayé dans tous les sens, avec ou sans guillemets, guillemets simple, chemin en dur ou relatif etc.... pas moyen....
 
si j'ai bien compris system() cela ouvre le shell je crois...
 
Je dois par contre préciser que je suis sous XP....
 
Bien evidement j'ai tenter de debugguer a la main dans tout les sens....
 
Les .bat ne marche pas, par contre si j'ouvre command et que je tape a la main ca passe....
 
Une idée ou tu as des infos que j'aurais pas concernant XP ??
 
merci d'avance
@+
cadou

Reply

Marsh Posté le 18-04-2002 à 15:33:39    

non system n'ouvre pas de console, mais il exécute une commande DOS (ça marche sous win2000 donc pas besoin de DOS,  juste une 'émulation';).
 
Si tu veux connaître l'erreur qu'il te ramène, lance ton programme Perl à partir d'une console, ça pourrait être intérressant :)

Reply

Marsh Posté le 18-04-2002 à 15:39:32    

cadoudal56 a écrit a écrit :

hello,
bon je vais faire en sorte de pas rentrer dans le top des posts a la con....




 
 :hello:

Reply

Marsh Posté le 18-04-2002 à 15:44:18    

j'aimerais bien mais je peux point....
 
c'est tellement gros (70 k le script, sacré bestiau !!)
et il y a tellement de parametres a la con que pour le lancer sous DOS je risque de ramer grave....
 
mais bon si on m'assure que c'est bien system("truc.exe -tralala" ) c'est que j'ai du me planter quelque part....
 
 
Je scripte beaucoup sous PERL depuis plus d'un an deja, j'arrive a faire des trucs de fou... Mais le lancement de programme externe c'est tout nouveau pour moi....
 
J'ai vu que l'on pouvait compiler du perl, mais j'ai aucune idée de la facon de faire, ni a quoi cela pourrait me servir...
 
J'arrive a me servir du debuggueur PERL, mais je ne vais pas plus loin....
 
merci quand meme
cadou

Reply

Marsh Posté le 18-04-2002 à 19:54:18    

pourrais-tu dans ton code insérer ceci :
 
eval {
    system ("truc.exe ..." );
};    # ne pas oublier le ; !!!
if ($@) {
    print "mon exe marche po :\n$@";
}
 
le fait d'évaluer ton expression (system ...) exécutera ton programme externe mais si celui-ci veut pas marcher, il doit retourner un message d'erreur sur STDERR que tu ne topes pas habituellement. Ici, via eval, si erreur il y a, son contenu sera envoyé à la variable $@. Si $@ est vrai, tu n'as plus qu'à le printer et tu sauras ce qui merde
 
à essayer aussi si ça marche pas avec `truc.exe ...` (attention, ce sont des anti quotes) si eval de system donne rien de plus


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 19-04-2002 à 08:25:11    

ah merci aricoh, j'avais pas penser a essayer ce type d'expression...
Je l'ai deja vu mais jamais essayer...
 
merci
@+
cadou
PS : je vous tiens au jus...

Reply

Marsh Posté le 19-04-2002 à 08:27:01    

arf, ça fait pas longtemps que j'ose l'essayer, ça m'a été d'une utilité importante dans un script où je crée des enregistrements dans une base Oracle via Perl
 
Sans eval, j'étais incapable de gérer les erreurs car dès qu'Oracle renvoyait une erreur, mon script était cuit illico, maintenant ça va nettement mieux [:yaisse2]


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 21-04-2002 à 21:31:35    

Au fait avec la commande system, visiblement on passe les arguments comme des éléments d'une liste, en gros tu peux fournir un tableau à system contenant le path du prog, puis les arguments.
 
Dans ton cas essaie ça :

Code :
  1. my @args = ("truc.exe", "-tralala" );
  2. system (@args);

Reply

Marsh Posté le 21-04-2002 à 21:31:35   

Reply

Marsh Posté le 24-04-2002 à 14:52:53    

hello,
 
bon ben le coup du eval.....
Le script a l'air de passer...
 
Deja j'ai un probleme avec ce con de prg qui veut pas prendre les noms de repertoire avec des espaces... pas pratqiue car je suis dans Program files
 
et le second probleme est qu'il semble que j'ai un probleme d'entete. Je mets les entete html de base, mais j'ai une internal server error et au debuggueur, le script est correct...
 
Pige plus moi...
Je vas essayer ce coup du tableau...
 
@+
cadou

Reply

Marsh Posté le 24-04-2002 à 14:54:36    

Ou Directos :
 

Code :
  1. system ("toto", "-option1", "-option2" );

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed