Je travaille dans Ubuntu. J’ai un tas de commandes (disons 10 commandes comme cmd1, cmd2, cmd3 ………….. cmd10)
Je veux écrire un script python, qui peut réaliser ce qui suit:
Il devrait traverser la structure de répertoires et appliquer une commande à un chemin de répertoire particulier. L’emplacement et les commandes me sont déjà connus.
Voici l’exemple, comment je veux que le script fonctionne.
/local/mnt/myspace/sample1$ cmd1 /local/mnt/myspace/sample2$ cmd2 /local/mnt/myspace$ cmd3 /local/mnt$cmd4 /local/mnt/myspace/sample9$ cmd 8 /local/mnt/myspace/sample3$ cmd10
Quelqu’un peut-il s’il vous plaît aider à ce sujet.
Utilisez simplement os.chdir(path)
.
Quelque chose comme:
import os from itertools import izip paths = ('/local/mnt/myspace/sample1', '../sample2', '../', '../', 'myspace/sample9/', '../sample3'] commands = (func1, func2, func3, func4, func5, func6) for path, command in izip(paths, commands): os.chdir(path) command()
Et juste mettre chaque commande dans une fonction.
Edit: Je pensais que vous vouliez exécuter différentes commandes Python dans des répertoires différents. S’il existe différents programmes externes, utilisez:
commands = (['cmd1', 'arg1'], ['cmd2', 'arg2'], ...) for path, command in izip(paths, commands): os.chdir(path) subprocess.call(command)
Aucune raison d’utiliser Popen
et d’ wait
quand il s’agit spécifiquement de l’ call
.
Peut-être quelque chose comme ça:
import subprocess import os jobs=[ ('/local/mnt/myspace/sample1', 'cmd1'), ('/local/mnt/myspace/sample2', 'cmd2'), ('/local/mnt/myspace', 'cmd3'), ('/local/mnt', 'cmd4'), ('/local/mnt/myspace/sample9', 'cmd', '8'), ('/local/mnt/myspace/sample3', 'cmd10'), ] for job in jobs: print "In", job[0], "executing", job[1:] os.chdir(job[0]) subprocess.Popen(job[1:]).wait()
(juste un coup rapide)
Regardez comment j’ai “abusé” de l’erreur apparente à la cmd 8 pour montrer comment appeler des programmes qui prennent des parameters.
import os pathCommands = {r'C:\Windows':'dir', r'C:\test':'cd..' } for path, command in pathCommands.items(): os.chdir(path) os.system(command)