2013-09-27 2 views
0

Je dois exécuter une commande avec des variables à l'intérieur de la commande. J'ai besoin de capturer la sortie et de l'enregistrer dans une ligne varible ou un tableau, ce n'est pas grave. Ça va être collé dans un textbox dans Tk de toute façon.Lecture d'une sortie de commande Unix avec Perl

J'ai essayé:

my @array = '$variable_with_command'; 

Je ne peux pas vraiment utiliser:

my $variable = 'unixcommand $variableinside'; 

en raison de la variable à l'intérieur, je l'ai vu que comme une suggestion d'autres postes stackoverflow.

Il travaille pour:

my $readvariable = 'ls -a'; 

parce qu'il n'y a pas de variables à l'intérieur, à moins qu'il ya un moyen d'inclure des variables et ont $ readvariable attraper la sortie? Merci d'avance.

Voici mon code (ce zéro imprimé):

sub runBatch { 
    my $directory = "/directpath/directoryuser/sasmodules/"; 
    my $command = 'sasq ' . $directory . $selectBatch; 
    my @batch = system($command); 
    print "This is the output\n"; 
    print "-----------------------------------"; 
    print @batch; 
    print "-----------------------------------"; 
} 
+2

Cela n'a pas grand chose à voir avec les variables de la commande. Cela a à voir avec la commande ['system'] (http://search.cpan.org/perldoc?perlfunc#system) qui ne fait pas ce que vous pensez. Pour capturer la sortie d'une commande externe, vous voulez utiliser les guillemets, l'opérateur 'qx()', ou ['readpipe'] (http://search.cpan.org/perldoc?perlfunc#readpipe). – mob

+0

Merci, mais si ce n'était pas pour les variables je n'aurais pas de problème. Je crois que l'utilisation de citations de retour soit la bonne ou pas, travaille pour mon problème. Je suis sûr qu'il y a beaucoup de solutions que Perl semble avoir. –

Répondre

3

Ceci est la réponse au cas où il aide tout le monde sur la base de commentaires qx.

sub runBatch { 
    my @batch = qx(sasq $director); 
    print "This is the output\n"; 
    print "-----------------------------------\n"; 
    print @batch; 
    print "-----------------------------------\n"; 
} 

Cela fonctionne en fait très bien - en utilisant des citations de retour: `

sub runBatch { 
    my $directory = "/path/directory/sasmodules/" . $selectBatch; 
    my $command = `sasq $directory`; 
    #my @batch = command 
    print "This is the output\n"; 
    print "-----------------------------------\n"; 
    print $command; 
    print "-----------------------------------\n"; 
    print $selectBatch; 
} 
Questions connexes