== GANGA en mode ligne de commande == Ce tutoriel montre le principe de fonctionnement de GANGA. Le job exécuté est celui de l'exemple de soumission de job avec LCG2. * __Lancement de GANGA__ [[BR]][[BR]] L'exécutable GANGA se trouve sous $GANGA_INSTALL_DIR/install/X.Y.Z/bin où X.Y.Z est la version de GANGA.[[BR]] Pour plus de facilité, mettez à jour votre variable d'environnement $PATH avec le chemin vers l'executable. Pour lacer GANGA il suffit de taper la commande '''ganga'''. {{{ [lambert@lpsc-ui ~]$ ganga *** Welcome to Ganga *** Version: Ganga-5-0-4 Documentation and support: http://cern.ch/ganga Type help() or help('index') for online help. This is free software (GPL), and you are welcome to redistribute it under certain conditions; type license() for details. ATLAS User Support is provided by the Hypernews Forum Ganga User and Developers You find the forum at https://hypernews.cern.ch/HyperNews/Atlas/get/GANGAUserDeveloper.html or you can send an email to hn-atlas-GANGAUserDeveloper@cern.ch GangaAtlas : INFO Tasks read from file Ganga.GPIDev.Lib.JobRegistry : INFO Found 1 jobs in "jobs", completed in 0 seconds Ganga.GPIDev.Lib.JobRegistry : INFO Found 1 jobs in "templates", completed in 0 seconds In [1]: }}} PS: Si il s'agit de votre première session, GANGA peut vous demander votre passphrase afin de créer un proxy VOMS à partir de votre certificat. Ce proxy sera utiliser par l'application lors de la soumission de job. * __Définir un objet Job__ [[BR]][[BR]] L'objet ''Job'' représente votre job, vous allez ensuite renseigner certains de ses attributs avant de le soumettre en utilisant ses fonctionnalités.[[BR]] Après le lancement de GANGA, vous obtenez un prompt, pour définir l'objet ''Job'' tapez la commande suivante. {{{ j=Job() }}} j designe maintenant pour GANGA une instance d'un objet de type Job en mémoire. * __Définir les paramètres du Job__ [[BR]][[BR]] Notre job prend deux arguments en entrée. Nous l'indiquons à notre instance de job de la façon suivante : {{{ In [2]:j.application = Executable(exe = File('~/TestGrid/edg3/job.sh'), args=['girafe','flipflap']) }}} * __Soumission de job__[[BR]][[BR]] Pour soumettre le job, il faut utiliser la fonctionnalité ''submit'' de l'instance. {{{ In [3]:j.submit() Ganga.GPIDev.Lib.Job : INFO submitting job 18 Ganga.GPIDev.Adapters : WARNING file /atlas/lambert/TestGrid/edg3/job.sh is not executable, overriding executable permissions in the input sandbox Ganga.GPIDev.Adapters : INFO submitting job 18 to Local backend Ganga.GPIDev.Lib.Job : INFO job 18 status changed to "submitted" Out[3]: 1 }}} * __Obtenir l'ID du job__[[BR]][[BR]] Avec GANGA les jobs ont leur propre ID. Pour l'obtenir exécutez les commande suivante {{{ In [4]:print j.id 18 Ganga.GPIDev.Lib.Job : INFO job 18 status changed to "running" Ganga.GPIDev.Lib.Job : INFO job 18 status changed to "completed" }}} PS: En cas de changements de statut du job, les changements apparaissent quand vous appuyer sur la touche ''return''. * __Obtenir une description complete du job__[[BR]][[BR]] Rien de plus simple, tapez j (la variable qui représente l'instance du Job) : {{{ In [5]:j Out[5]: Job ( status = 'completed' , name = '' , inputdir = '/atlas/lambert/gangadir/workspace/lambert/LocalAMGA/18/input/' , outputdir = '/atlas/lambert/gangadir/workspace/lambert/LocalAMGA/18/output/' , outputsandbox = [] , id = 18 , info = JobInfo ( submit_counter = 1 ) , inputdata = None , merger = None , inputsandbox = [] , application = Executable ( exe = File(name='/atlas/lambert/TestGrid/edg3/job.sh',subdir='.') , env = {} , args = ['girafe', 'flipflap'] ) , outputdata = None , splitter = None , subjobs = 'Job slice: jobs(18).subjobs (0 jobs) ' , backend = Local ( actualCE = 'lpsc-ui.in2p3.fr' , workdir = '/tmp/tmptrit10' , id = 2126 , exitcode = 0 ) ) }}} * __Récupérer la sortie du job__[[BR]][[BR]] Les sortie du job sont stockées dans le répertoire indiqué dans le paramètre outputdir (voir ci-dessus)[[BR]] Il y a deux façon de lire une sortie de job; En utilisant directement les commandes shell avec un '!' devant {{{ In [6]:!ls $j.outputdir __jobstatus__ stderr stdout __syslog__ In [7]:!cat $j.outputdir/stdout Comment t'appelles tu girafe ? Je m'appelle flipflap ! }}} ou alors en définnissant un objet ''fichier'' et en utilisant ses fonctionnalités {{{ In [8]:outfile = file(j.outputdir+'stdout') In [9]:print outfile.read() Comment t'appelles tu girafe ? Je m'appelle flipflap ! }}} une autre variante consiste à ouvrir le fichier avec le programme associé à son extension (nécessite d'avoir un service X11 qui tourne) {{{ In [17]:j.peek('stdout') }}} cette commande lance 'vi' dans ce cas. [wiki:tutoganga up]