$ 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 ça?
De Perlfaq8 :
Vous confondez le but de system () et backticks (``). system () exécute une commande et renvoie des informations sur l'état de sortie (sous la forme d'une valeur de 16 bits: les 7 bits bas sont le signal d'où le processus est mort, le cas échéant, et les 8 bits hauts sont la valeur de sortie réelle). Les backticks (``) exécutent une commande et retournent 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 depuis Perl. Les plus communs avec leurs significations sont:
Voir aussi Comment puis-je capturer STDERR à partir d'une commande externe?
Le moyen le plus simple consiste à utiliser le ``
fonctionnalité en Perl. Cela exécutera ce qui est à l'intérieur et retournera ce qui a été imprimé à stdout:
my $pid = 5892;
my $var = `top -H -p $pid -n 1 | grep myprocess | wc -l`;
print "not = $var\n";
Cela devrait le faire.
Essayez d'utiliser qx{command}
plutôt que des astuces. Pour moi, c'est un peu mieux parce que: vous pouvez faire du SQL avec et ne pas vous soucier d'échapper aux guillemets et autres. Selon l'éditeur et l'écran, mes vieux yeux ont tendance à manquer les minuscules tiques arrière, et il ne devrait jamais y avoir de problème de surcharge, comme l'utilisation de crochets angulaires par rapport à glob.
L'utilisation de backtick
ou qx
aide, merci à tous pour les réponses. Cependant, j'ai trouvé que si vous utilisez backtick
ou qx
, la sortie contient un saut de ligne et je dois le 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
Utilisez backtick pour les commandes système qui aident à stocker leur résultat dans la variable Perl.
mon $ pid = 5892; mon $ pas = `` top -H -p $ pid -n 1 | grep myprocess | wc -l`; print "not = $ not\n";