Re: script

Page principale

Répondre à ce message
Auteur: Jerome Kieffer
Date:  
À: guilde
Sujet: Re: script
On Mon, 24 Nov 2008 20:49:28 +0100
ALD <dieudonne.alain@???> wrote:

> J'ai effectivement un peu regardé du coté de Python, mais je ne me vois
> pas apprendre ce nouveau langage qui peut te paraitre facile, mais pour
> moi... déja le bash j'ai du mal, alors pour le python je crains le pire.
>
> Je n'écris ces scripts que pour automatiser certaine actions. Je ne
> pense pas devenir développeur et les journées que je passe à ça je ne
> les consacre pas directement à mon métier ni à la modélisation 3D des
> projets.


Il y a 10 ans mon mentor d'alors m'a dit que si mon script bash
dépassait 10 lignes, alors il valait mieux le ré-écrire en python (le
temps passé à ré-écrire serait gagné 2 fois quand il faudra reprendre
ce bout de code).
C'est sans doute un des conseils les plus pertinents que j'ai eu.

Aujourd'hui encore je fais écrire à python mes scripts shell :)


--
Jérôme KIEFFER
http://www.terre-adelie.org
#!/usr/bin/python
#this program submit a FOX job through the PBS queue manager with the input data inlined
# Jerome Kieffer 29/03/2007

import os,sys,gzip

def SubmitOneFile(name,iter=1000000):
    """submit one file after the other"""
    ext=os.path.splitext(name)[1].lower()
    if ext==".gz":
        data=[i.strip() for i in gzip.open(name).readlines()]
    else:
        data=[i.strip() for i in open(name).readlines()]
    path,filename=os.path.split(name)
    basename=os.path.splitext(filename)[0]
    pbs=basename+".pbs"
    print "submitting file : %s as pbs job : %s"%(filename,pbs)
    cwd=os.getcwd()
    os.chdir(os.path.join(cwd,path))
    f=open(pbs,"w")
    f.write("echo -n 'Running Fox on computer '\nhostname\ndate\nuname -a\n")
    f.write("if  [ -d /tmp/$PBS_JOBID ] ; then cd /tmp/$PBS_JOBID ; else cd /tmp ; fi\n")
    f.write("cat <<FINITO >input.xml\n")    
    for i in data:f.write(i+"\n")
    f.write("FINITO\n")
    f.write("nice /usr/local/bin/Fox-nogui input.xml -o output.xml -n %i 1>&2 \n"%iter)
    f.write("cat output.xml\n")
    f.close()
    os.system("qsub -q fox  %s"%pbs)
    os.chdir(cwd)


if len(sys.argv)<2: 
    raise "Please give the name of the file to process. Possible options are -n number of trials (1 000 000 by default)"
names=[]
options=[]
iter=10000000


for i in sys.argv[1:]:
    if os.path.isfile(i):names.append(i)
    elif i.find("-n=")==0:iter=int(i.split("=")[1])


for name in names:
    SubmitOneFile(name,iter)