2010-11-22 9 views
1

J'écris un programme récursif en utilisant argparse. Le seul argument requis est un fichier (ou des fichiers) sur lequel agir. Quand je l'appelle récursivement, je n'ai pas besoin des noms de fichiers (comme je vais appeler un nouveau répertoire), mais j'ai besoin des options. le problème est que argparse permet à la fois python programname.py -options arg FILENAME FILENAME et python programname.py FILENAME FILENAME -options arg. Je pourrais minutieusement chercher un '-' et le résoudre avec une tonne de déclarations if, mais je pense qu'il devrait y avoir un meilleur moyen.récursivité avec python argparse

pas sûr que ça compte, mais voici mes déclarations argparse:

parser = argparse.ArgumentParser(description='Personal upload script. (defaults to ' + user + '@' + server + directory + ')') 
parser.add_argument('files', nargs="+", help='file(s) to upload') 
parser.add_argument('-s', metavar='example.com', default=server, help='server to upload to') 
parser.add_argument('-u', metavar='username', default=user, help='ftp username') 
parser.add_argument('-p', metavar='password', default=password, help='ftp password') 
parser.add_argument('-d', metavar='example/', default=directory, help='directory to place file in') 
parser.add_argument('-n', metavar='myfile.txt', help='name to save file as') 
parser.add_argument('-c', metavar='###', help='chmod upload') 
parser.add_argument('-l', action='store_true', help='print out new url(s)') 
parser.add_argument('-r', action='store_true', help='recursive') 
parser.add_argument('-F', action='store_true', help='force (overwrite files/create non-existing dirs)') 
parser.add_argument('-v', action='store_true', help='verbose') 
args = parser.parse_args() 

merci beaucoup!

Répondre

7

Vous êtes en train de vous rendre la vie difficile. Vous ne faites pas de programmes récursifs, vous faites fonctions récursive. Faire un programme récursif est un excellent moyen de manquer de mémoire et généralement submerger un système.

Réécrivez votre application afin que le travail récursif soit limité à une fonction qui s'appelle elle-même, au lieu d'une autre instance de votre application.

Ou, mieux, d'éliminer entièrement la récursivité. Il semble que vous parcourez simplement une arborescence de répertoires. Il n'y a aucune raison de le faire de manière récursive. En fait, Python a une fonction de bibliothèque qui prendra soin de marcher dans un arbre de répertoire pour vous. Voir os.walk.

1

Vous ne devriez probablement pas effectuer de récursivité au niveau du processus. Cela dit, je pense que le traitement de "-" par argparse pourrait fournir l'outil que vous cherchez (si je comprends bien). Recherchez le document argparse pour la chaîne "-".

Questions connexes