2009-09-30 6 views
-2

Je souhaite désinstaller un package dans Solaris, par exemple NewPackage. Pour que j'utilise la commande:Comment puis-je capturer la sortie de pkgrm en Perl?

pkgrm NewPackage 

Il affiche toutes les étapes du STDOUT et à la fin, il donnera le message que le package est désinstallé avec succès. Si je veux désinstaller le même paquet dans un programme Perl, comment puis-je rediriger les messages STDOUT vers un fichier de sorte qu'à la fin de l'exécution je puisse aller dans le fichier et vérifier le fichier. Actuellement, j'ai essayé les commandes suivantes sans succès:

open (FD, "/usr/tmp/result.txt"); 
$input1 = <FD>; 
$input2 = <FD>; 
system("pkgrm NewPackage" < $input1); 

Mais ne sais pas comment passer la deuxième entrée.

Veuillez nous informer comment procéder.

+0

Si vous souhaitez rediriger la sortie de pkgrm vers un fichier, alors pourquoi essayez-vous exactement le contraire dans votre exemple de code? – innaM

+0

Je veux passer l'entrée au script en cours d'exécution, puis rediriger la sortie de pkgrm vers un autre fichier à des fins de vérification –

Répondre

2

En général:

  • utiliser les strict et warnings pragma
  • utilisation 3 arguments ouvert avec une poignée lexicale
  • test pour voir si votre appel ouvert réussit avant de poursuivre votre script
  • si vous numérotez vos noms de variables ($input1, $input2) utilisez un tableau à la place (@inputs)
  • si vous voulez utiliser une variable nom en tant que variable, utilisez un hachage à la place
  • en cas de doute, RTFM. Depuis TFM est grand et difficile de trouver des choses dans un premier temps, vous pouvez lire How To RTFM
  • The FAQs sont très pratiques aussi. Il y a a whole section on system interaction et another on file manipulation. Lorsque vous avez besoin d'une fonction pour effectuer une tâche aléatoire, regardez functions by category section dans perlfunc. Quoi qu'il en soit, vous aurez besoin de définir ce que vous essayez de faire un peu plus précisément.

Voulez-vous exécuter votre commande et vider son STDOUT dans un fichier:

`pkgrm $package > $outfile`; 

Ou peut-être ajouter les résultats à un journal existant:

`pkgrm $package >> $outfile`; 

Ou voulez-vous attraper le résultats et voir ce qui s'est passé dans votre programme:

open(my $result_fh, '>', $outfile) or die "can't open logfile - $!\n"; 
my $output = `pkgrm $package`; 
if($oupt =~ /happiness/) { 
    print $result_fh "hooray!\n", $output; 
} 
else { 

    print $result_fh "uh oh\n", $output; 
} 

Ou avez-vous besoin de surveiller l'erreur standard?

Ou STDERR et STDOUT doivent-ils être combinés en un seul flux?

Pour ces cas et plus see perlfaq8.

Questions connexes