je un fichier, appelé list.txt, qui est une liste de noms de fichiers:Python: script pour plusieurs scripts bash
input1.txt
input2.txt
input3.txt
Je veux construire un script python qui fera un fichier pour chacun de ces noms de fichiers. Plus précisément, j'en ai besoin pour imprimer du texte, incorporer le nom du fichier et l'enregistrer dans un fichier .sh unique. Mon script est la suivante:
import os
os.chdir("/Users/user/Desktop/Folder")
with open('list2.txt','r') as f:
lines = f.read().split(' ')
for l in lines:
print "#!/bin/bash\n#BSUB -J",l+".sh","\n#BSUB -o /scratch/DBC/user/"+l+".sh.out\n#BSUB -e /scratch/DBC/user/"+l+".sh.err\n#BSUB -n 1\n#BSUB -q normal\n#BSUB -P DBCDOBZAK\n#BSUB -W 168:00\n"
print "cd /scratch/DBC/user\n"
print 'grep "input"',l+" > result."+l+".txt"
with open('script{}.sh'.format(l), 'w') as output:
output.write(l)
J'ai quelques questions:
- Les fichiers de sortie contiennent uniquement le nom du fichier - pas le contenu que je l'ai imprimé.
Pour être clair mes fichiers de sortie (je devrais avoir 3) devrait ressembler à ceci:
#!/bin/bash
#BSUB -J input3.sh
#BSUB -o /scratch/DBC/user/input1.sh.out
#BSUB -e /scratch/DBC/user/input3.sh.err
#BSUB -n 1
#BSUB -q normal
#BSUB -P DBCDOBZAK
#BSUB -W 168:00
cd /scratch/DBC/user
grep "input" input3 > result.input3.txt
Je suis très nouveau pour Python donc je suppose qu'il pourrait y avoir des moyens beaucoup plus simples d'impression et de l'insertion mon texte Toute aide serait très appréciée.
MISE À JOUR J'ai maintenant fait le script suivant, qui fonctionne presque.
import os
os.chdir("/Users/user/Desktop/Folder")
with open('list.txt','r') as f:
lines = f.read().split('\n')
for l in lines:
header = "#!/bin/bash \n#BSUB -J %s.sh \n#BSUB -o /scratch/DBC/user/%s.sh.out \n#BSUB -e /scratch/DBC/user/%s.sh.err \n#BSUB -n 1 \n#BSUB -q normal \n#BSUB -P DBCDOBZAK \n#BSUB -W 168:00\n"%(l,l,l)
script = "cd /scratch/DBC/user\n"
script2 = 'grep "input" %s > result.%s.txt\n'%(l,l)
all= "\n".join([header,script,script2])
with open('script_{}.sh'.format(l), 'w') as output:
output.write(all)
Le problème que j'ai encore est que cela crée 4 scripts, pas 3 comme je m'y attendais: script_input1.sh, script_input2.sh, script_input3.sh et script_sh. Ce dernier, script_sh a juste le texte imprimé mais rien où le texte "d'entrée" serait. Je pense que c'est parce que mon fichier list.txt a un "\ n" à la fin de celui-ci? Cependant, j'ai regardé et il n'y a pas vraiment. Y a-t-il un moyen de contourner ceci? Peut-être que je peux utiliser une sorte de fonction de longueur?
Il n'y a pas besoin pour utiliser vraiment Python, un script Bash fera-t-il aussi? –
Non, je voudrais vraiment utiliser Python dans cette instance. Je sais que Bash peut le faire. – m93
La solution appropriée serait probablement de passer la variable comme un argument à un script statique, plutôt que d'écrire un certain nombre de scripts statiques avec la variable inline. – tripleee