用python argparse递归

Non*_*biz 1 python recursion argparse

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

不确定它是否重要,但这是我的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()
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Nic*_*ght 7

你只是让自己生活困难.你没有使程序递归,你使函数递归.使程序递归是耗尽内存并且通常压倒系统的极好方法.

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

或者,更好,完全消除递归.看起来你只是在遍历目录树.没有理由以递归的方式做到这一点.事实上,Python有一个库函数,它将为您处理目录树.见os.walk.