Skip to main content
 首页 » 编程设计

python之使用 python argparse 递归

2025年05月04日14sharpest

我正在使用 argparse 编写递归程序。唯一需要的参数是一个(或多个)要操作的文件。当我递归调用它时,我不需要文件名(因为我将调用一个新目录),但我需要选项。问题是 argparse 允许 python programname.py -options arg FILENAME FILENAME 和 python 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() 

非常感谢!

请您参考如下方法:

你只是让自己的日子不好过。你不是让程序递归,而是让函数递归。使程序递归是耗尽内存并通常使系统不堪重负的绝佳方法。

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

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