2010-11-22 59 views
1

我在写一个使用argparse的递归程序。唯一需要的参数是要执行的文件(或多个文件)。当我递归调用它时,我不需要文件名(因为我将调用一个新目录),但我需要这些选项。问题是,argparse允许python programname.py -options arg FILENAME FILENAMEpython programname.py FILENAME FILENAME -options arg。我可以辛苦搜索一个' - '并用大量的if语句来解决,但我觉得应该有更好的方法。递归与python argparse

不知道它的问题,但这里是我的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() 

非常感谢!

回答

7

你只是让自己难过。你不会让程序递归,你可以递归函数。制作一个程序递归是一个很好的方式,可以用尽内存并且通常会压倒一个系统。

重写您的应用程序,以便递归工作仅限于调用自身的函数,而不是应用程序的另一个实例。

或者,更好的是,完全消除递归。它看起来像你只是遍历目录树。没有理由递归地做这件事。事实上,Python有一个库函数,可以为你处理目录树。请参阅os.walk

1

你可能不应该进行过程级递归。这就是说,我认为argparse对“ - ”的处理可能会提供您正在寻找的工具(如果我理解正确的话)。在argparse文档中搜索字符串“ - ”。