2013-03-28 5 views
0

Salut, j'aimerais passer un paramètre à mon script perl qui doit être exécuté par le biais de qsub. Alors je cours:Passer un paramètre à un script perl exécuté par le biais de qsub

qsub -l nodes=node01 -v "i=500" Test.pl 

Alors que dans Test.pl j'essaie de i paramètre appeler plusieurs façons:

use Getopt::Long; 
$result = GetOptions ("i" => \$num); 
open(FILE,">/data/home/FILEout.txt"); 
    print FILE "$num\n";    
    print FILE "$ARGV[0]";  
close(FILE); 

fichier de sortie Unfortunatelly du script perl est toujours vide.

Avez-vous des suggestions? Où est-ce que je me trompe? Aide s'il vous plaît

+0

Quelle est la sortie de ce 'Test.pl':' use Data :: Dumper; open ($ FH, ">/data/home/FILEout.txt") ou die $ !; local $ Data :: Dumper :: Terse = 1; local $ Data :: Dumper :: Indent = 0; print ($ FH Dumper (\ @ ARGV), "\ n"); print ($ FH join (',', keys (% ENV)), "\ n"); '? – ikegami

+0

@ikegami encore j'apprécie vraiment votre aide. La sortie de votre Test.pl est le suivant: 'PBS_NODEFILE, PBS_O_SHELL, PBS_O_SYSTEM, SSH_ASKPASS, PBS_O_WORKDIR, PBS_O_LANG, PBS_O_MAIL, PBS_O_PATH, LESSOPEN, PBS_JOBCOOKIE, PWD, LANG, USER, PBS_O_HOST, G_BROKEN_FILENAMES, LOGNAME, PBS_JOBID, SHLVL, INPUTRC, CHEMIN, PBS_ENVIRONMENT, PBS_O_QUEUE, OMP_NUM_THREADS, PBS_QUEUE, HISTSIZE, PBS_O_HOME, PBS_MOMPORT, ACCUEIL, MAIL, PBS_O_LOGNAME, TZ, PBS_NODENUM, PBS_TASKNUM, NCPUS, HOSTNAME, _, LS_COULEURS, SHELL, PBS_JOBNAME, PBS_JOBDIR, TMPDIR, ENVIRONNEMENT' en utilisant la commande ' qsub -l nodes = node01 -v "i = 500" Test.pl' – desmo

+0

et @ARGV est vide – desmo

Répondre

1

Selon tous les documents, je peux trouver -v ensembles un environnement var, donc vous devriez utiliser $ENV{i} pour obtenir 500. (Vérifiez votre propre documentation pour confirmer.)


Si vous voulez passer en fait un arg à votre script, vous pouvez essayer d'utiliser

qsub ... Test.pl -i=500 

Mais sur la base de ma recherche sur le web, qui pourrait seulement travailler pour certaines versions de qsub. D'autres, il faudrait que vous faites un script d'aide (dire Test.sh)

#!/bin/sh 
Test.pl "-i=$i" 

ainsi que la commande

qsub ... -v 'i=500' Test.sh 

Si qsub ... Test.pl ...args... est pris en charge et vous pouvez modifier votre script, la solution la plus simple est

qsub ... Test.pl 500 

et

my ($i) = @ARGV; 
+0

Merci pour l'aide. J'utilise PBRProfessional 10.4. Il ne supporte pas 'qsub ... Test.pl -i = 500' et comment vous proposez -v définit une variable d'environnement. J'ai donc changé mon script et j'ajoute 'use Env; print FICHIER "$ ENV {i}"; 'mais rien n'a changé. Est-ce que tu sais pourquoi? Thans again – desmo

+0

@desmo, Non, je n'ai que la documentation pour aller, et tous les documents que j'ai trouvés montrent '-v' réglage de l'environnement vars. (Notez que 'utiliser Env;' ne fait rien d'utile ici.) J'ai ajouté une solution alternative à ma réponse (en utilisant un script d'aide), mais il suppose aussi que '-v' définit des variables d'environnement. – ikegami

0

I Enfin obtenir la solution qui fonctionne avec PBRProfessional 10.4.

Il y a deux façons de le résoudre:

premier est le suivant

echo "perl /path/to/Test.pl -i 500" | qsub -l nodes=node06 

La deuxième est deux utilisation

qsub -l nodes=node06 -v i=500 Test.pl 

et lire le paramètre dans le Test.pl par $ ENV {i}

Questions connexes