$ cat test.pl
my $pid = 5892;
my $not = system("top -H -p $pid -n 1 | grep myprocess | wc -l");
print "not = $not\n";
$ perl test.pl
11
not = 0
$
Je veux capturer le résultat, c'est-à-dire 11
dans une variable. Comment puis-je faire cela ?
$ cat test.pl
my $pid = 5892;
my $not = system("top -H -p $pid -n 1 | grep myprocess | wc -l");
print "not = $not\n";
$ perl test.pl
11
not = 0
$
Je veux capturer le résultat, c'est-à-dire 11
dans une variable. Comment puis-je faire cela ?
De [Perlfaq8](http://perldoc.perl.org/perlfaq8.html#Why-can't-I-get-the-output-of-a-command-with-system()%3f) :
Vous confondez le but de système() y backticks (``). system() exécute une commande et retourne des informations sur l'état de sortie (sous la forme d'une valeur de 16 bits : les 7 bits de poids faible sont le signal de mort du processus, s'il y en a un, et les 8 bits de poids fort sont la valeur de sortie réelle). Backticks (``) exécute une commande et retourne ce qu'elle a envoyé à STDOUT.
$exit_status = system("mail-users");
$output_string = `ls`;
Il existe de nombreuses façons d'exécuter des commandes externes à partir de Perl. Les plus courantes, avec leur signification, sont les suivantes :
Voir aussi Comment puis-je capturer STDERR à partir d'une commande externe ?
Essayez d'utiliser qx{command}
plutôt que des backticks. Pour moi, c'est un peu mieux parce que : vous pouvez faire du SQL avec et ne pas vous soucier de l'échappement des guillemets et autres. Selon l'éditeur et l'écran, mes vieux yeux ont tendance à ne pas voir les minuscules points arrière, et il ne devrait jamais y avoir de problème de surcharge, comme l'utilisation de crochets d'angle par rapport au glob.
Utilisation de backtick
o qx
aide, merci à tous pour les réponses. Cependant, j'ai découvert que si vous utilisez backtick
o qx
La sortie contient une nouvelle ligne de queue et je dois la supprimer. J'ai donc utilisé chomp
.
chomp($host = `hostname`);
chomp($domain = `domainname`);
$fqdn = $host.".".$domain;
Plus d'informations ici : http://irouble.blogspot.in/2011/04/perl-chomp-backticks.html
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.