Comment puis-je stocker le résultat d'un système de commande dans une variable Perl?
$ 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 le faire?
Vous devez vous connecter pour publier un commentaire.
De Perlfaq8:
Vous êtes confus le but de system() et backticks (`). système() exécute une commande et renvoie un code de sortie d'informations (comme une valeur 16 bits: la faible 7 bits sont le signal le processus de mort à partir, le cas échéant, et les 8 bits de poids forts sont la réelle valeur de sortie). Backticks (`) l'exécution de la commande et de retour ce qu'il a envoyé sur la sortie standard STDOUT.
Il existe de nombreuses façons d'exécuter des commandes externes de Perl. La plupart des communes, avec leurs significations sont les suivantes:
l'appel de script perl
la sortie de la commande
l'entrée ou la sortie) de votre script
Voir aussi Comment puis-je capturer la sortie STDERR d'une commande externe?
La façon la plus simple est d'utiliser le
``
fonctionnalité en Perl. Cela permettra d'exécuter ce qui est à l'intérieur et de retour de ce qui a été imprimé sur stdout:Cela devrait le faire.
v5.6.1
.perl -e '$a="Hello"; print `echo $a`'
Essayez d'utiliser
qx{command}
plutôt que de backticks. Pour moi, c'est un peu mieux parce que: vous pouvez faire SQL avec elle et ne pas s'inquiéter au sujet d'échapper les guillemets, par exemple. Selon l'éditeur et à l'écran, mes vieux yeux ont tendance à manquer le petit retour de tiques, et il ne devrait jamais avoir un problème de surcharge comme l'utilisation de crochets contre glob.À l'aide de
backtick
ouqx
aide, merci à tous pour les réponses. Cependant, j'ai trouvé que si vous utilisezbacktick
ouqx
, la sortie contient des retour à la ligne et j'ai besoin de l'enlever. J'ai donc utiliséchomp
.Plus d'informations ici:
http://irouble.blogspot.in/2011/04/perl-chomp-backticks.html
Utilisation backtick pour des commandes du système qui permet de stocker le résultat dans la variable Perl.
mon $pid = 5892;
my $pas = `top -H -p $pid -n 1 | grep myprocess | wc-l`;
print "pas = $non\n";