Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1381 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  process probléme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

process probléme

n°2027416
rapdoc
Posté le 06-10-2010 à 21:47:26  profilanswer
 

Bonjour a tous  
J’ai besoin de votre aide pour résoudre un problème  
je suis débutant en perl donc toute suggestion ou aide peut me faire avancé et merci d’avance.
J’utilise un programme perl tk pour lancé d’autre script .mon problème est que je veux avoir la possibilité de stoppé l’exécution du script via un bouton « stop » le problème est que j’ai pas la main, des que je lance les scripts via le bouton je dois fermé l’application pour stoppé le processus, ce n’est vraiment pas trop pratique. Avez-vous des solutions à ce genre de problème ?
Avant pour lancé les script j’utiliser system , j’essaye de faire la meme chose avec le module win32 ::process .mais ca fonctionne pas. Voici le script :
 
 
 
sub voiture {
   my ( $Refargument1, $Refargument2 ) = @_;
   my ( $argument1, $argument2 ) = ( ${$Refargument1}, ${$Refargument2} );
   print " $argument1\n" if ( defined $argument1 );
   print " $argument2\n" if ( defined $argument2 );
   if ( defined $argument1 and defined $argument2 ) {
 
#system("voiture_v8.exe $argument1 $argument2" ); encienne commande pour #lancer les script  
 
#### utilisation de win32 ::process  
sub ErrorReport{
        print Win32::FormatMessage( Win32::GetLastError() );
    }
 my $ProcessObj;
    Win32::Process::Create($ProcessObj,
                                "c:\\Windows\\system32\\cmd.exe",
                                "voiture_v8.exe $argument1 $argument2",
                                0,
                                NORMAL_PRIORITY_CLASS,
                                "." )|| die ErrorReport();
 
  }
  else {
    warn "Les 2 arguments ne sont pas ok\n";
  }
  return;
}

mood
Publicité
Posté le 06-10-2010 à 21:47:26  profilanswer
 

n°2027494
gilou
Modérateur
Modzilla
Posté le 07-10-2010 à 11:19:24  profilanswer
 

La doc du module Win32::Process est explicite pourtant:
$ProcessObj->Suspend() et $ProcessObj->Resume() pour interrompre et reprendre, ou sinon $ProcessObj->Kill( ... ) pour l’arrêter définitivement, ça marche pas?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2027512
gilou
Modérateur
Modzilla
Posté le 07-10-2010 à 11:45:23  profilanswer
 

Par contre, ce que tu fais me semble pas très bon:
Win32::Process::Create($ProcessObj, "c:\\Windows\\system32\\cmd.exe", "voiture_v8.exe $argument1 $argument2", ...)
Ça devrait être Win32::Process::Create($ProcessObj, "c:\\...\\voiture_v8.exe", "$argument1 $argument2", ...)
avec le bon path complet pour voiture_v8.exe, car je vois pas l'intérêt de passer par un shell intermédiaire.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2028157
rapdoc
Posté le 10-10-2010 à 21:15:24  profilanswer
 

Merci beaucoup gilou pour l’aide je vais essayer d’appliquée ce que tu ma indiqué par contre je souhaite avoir la possibilité de lancé les scripts extérieur en les mettons dans n’importe quelle endroit dans le disque est le fait d’indiqué exactement le chemin ne permet plus de faire ca y’a il une solution pour pouvoir lancé les scripts sans indiqué un chemin exact (a parir d’un disque dur externe ou autre)

n°2028321
gilou
Modérateur
Modzilla
Posté le 11-10-2010 à 12:41:35  profilanswer
 

La solution, c'est de faire comme le système: récupérer le path système, de regarder pour chaque composant du path, si le programme voulu est dans le répertoire, et si oui, on a alors le path absolu à utiliser.
Il y a un module qui doit faire cela: File::SearchPath. Je l'ai jamais utilisé, mais au vu de la doc, ça devrait coller.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2028807
rapdoc
Posté le 12-10-2010 à 23:40:41  profilanswer
 

Bonjour gilou , je te remercie enormement pour les solution.
comme je suis encore debutant en perl j'ai un peut de mal a appliqué la doc des module.
mon problem est que aprés avoir creé le boutton stop je c'est pas quelle commande utiliser pour faire le Kill. peut tu m'aider  
voici le code
#!/usr/bin/perl
use strict;
use warnings;
use Win32;
use Win32::Process;
use Tk;
use Cwd;
require Tk::BrowseEntry;
 
my $mw = MainWindow->new(
  -title      => "bm",
  -background => 'white',
);
$mw->minsize( 500, 500 );
 
my $frame = $mw->Frame()->pack(qw/ -pady 10 -padx 10 /);
 
my ( $argument1, $argument2 );
 
my $BrowseEntry1 = $frame->BrowseEntry(
  -label    => "name : ",
  -variable => \$argument1,
)->pack(qw/ -side left -padx 10 /);
 
my $BrowseEntry2 = $frame->BrowseEntry(
  -label    => "n : ",
  -variable => \$argument2,
  -choices  => [ "1", "2" ],
)->pack(qw/ -side right -padx 10 /);
 
my $BoutonLancementProg = $mw->Button(
  -text    => "lancer prog",
  -command => [ \&voiture, \$argument1, \$argument2 ],
)->pack();
 
my $killProg = $mw->Button(
  -text    => "Stop",
  -command => ,    ###### c'est quoi comme commande
)->pack();
 
MainLoop;
 
sub voiture {
   my ( $Refargument1, $Refargument2 ) = @_;
   my ( $argument1, $argument2 ) = ( ${$Refargument1}, ${$Refargument2} );
   print "Argument 1 :  : $argument1\n" if ( defined $argument1 );
   print "Argument 2 :  : $argument2\n" if ( defined $argument2 );
   if ( defined $argument1 and defined $argument2 ) {
 
    #system("voiture_v8.exe $argument1 $argument2" );
 
 sub ErrorReport{
        print Win32::FormatMessage( Win32::GetLastError() );
    }
 
   my $ProcessObj;
    Win32::Process::Create($ProcessObj,
                                "h:\\Script\\voiture_v8.exe",
                                "voiture_v8.exe $argument1 $argument2",
                                0,
                                NORMAL_PRIORITY_CLASS,
                                "." )|| die ErrorReport();
 
 my $exitcode;
 $ProcessObj->Kill($exitcode)
 
}
  else {
    warn "Les 2 arguments ne sont pas ok\n";
  }
  return;

n°2028974
gilou
Modérateur
Modzilla
Posté le 13-10-2010 à 16:12:35  profilanswer
 

Ben le $ProcessObj->Kill($exitcode)  n'a rien a faire après le Win32::Process::Create je pense  (a moins que cette dernière fonction ne retourne qu'après l’exécution du process).
Par contre, c'est ça que tu veux appeler dans ta commande killprog.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2029093
rapdoc
Posté le 13-10-2010 à 21:34:11  profilanswer
 

Je veux pouvoir stopper le process  par un simple click sur le bouton   ‘stop’ , comme tu ma indiqué avant et comme c’est indiqué dans la doc j’essaye d’utiliser la fonction  $ProcessObj->Kill( ... )
Mais je n’arrive pas à l’implémenter et je ne trouve pas d’exemple qui ressamble a ce que je veut faire ,peut tu stp m’aider a faire cette fonction  
Le but est a l’appui sur le bouton ‘stop’  le process s’arréte sans fermer le programme  

n°2029133
gilou
Modérateur
Modzilla
Posté le 14-10-2010 à 02:06:35  profilanswer
 

Citation :

j’essaye d’utiliser la fonction  $ProcessObj->Kill( ... )  
Mais je n’arrive pas à l’implémenter

:??:  
Elle est pas à implémenter, cette fonction, elle est juste à appeler à l'appui du bouton stop.

Citation :

Le but est a l’appui sur le bouton ‘stop’  le process s’arréte sans fermer le programme

Lequel? voiture_v8.exe ou le script perl?
Si c'est de voiture_v8.exe qu'il s'agit, alors il faudrait peut être parler français, hein: c'est interrompre le processus, pas l'arrêter!
Dans ce cas la, c'est bien entendu pas $ProcessObj->Kill( ... )  qu'il faut appeler, mais $ProcessObj->Suspend() [et $ProcessObj->Resume() pour reprendre l'exécution du processus]
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  process probléme

 

Sujets relatifs
[réglé]probleme newbe pour excel merci d'avanceconvertir \u00eb en ë (résolu, problème d'encodage/décodage)
[Resolu] probleme suppression du contenu d'une celluleproblème ajout d'une actualité
Flash et CSS, template en ligne qui ne marche pasProbleme avec getElementById
Problème lecture flux output processProblème de Process.Start depuis une page ASPX
IPC : problème d'ériture sur un segment attaché par un autre process[PHP] Problème d'affichage avec xslt_process
Plus de sujets relatifs à : process probléme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR