如果给出值,则忽略optparse
问题描述:
我希望能够传递参数而不必指定optparse选项。如果我确实通过了一个选项,它必须是已知的选项,否则脚本将失败。如果给出值,则忽略optparse
Rsync的下列文件到目的地
myscript.py filename
Rsync的以下文件夹到目的地(这一切都是想通了函数创建)。
myscript.py -f foldername
原因是,我有一个数组(或字典)与“文件夹名称”绑定。如果没有选项通过,CLI中给出的参数是用户调用脚本的工作文件夹中的文件。通过-f
表示上传一个文件夹,其值存储在一个字典中(用户可以在任何目录下,该文件夹的路径是提前知道的)。
我最好为这两个选项添加选项吗? -f
为文件和-v
为文件夹又名版本?
答
我一直都很明确,但是你可以短路optparse。
# args[0] is always the executable's name
if len(args) > 1:
parser.parse_args(args, options)
else:
#open file
答
款待-f
作为不带参数的选项,并用它来切换位置参数的行为(即foldername
)。
答
parser.parse_args()
总是返回两个值:解析选项之后剩余
- 选项,包含所有选项
- ARGS,位置参数列表中值的对象
(Totorial)
因此,你可以做这样的事情:
parser = OptionParser()
parser.add_option("-f", "", action="store_true", dest="folder", default=False)
(options, args) = parser.parse_args(sys.argv)
fname = args[1] # name of folder or file
if options.folder:
# do stuff for folder
else:
# do stuff for file
你大概可以按照另一种方法是,检查参数,然后进行相应的处理。例如,如果os.path.isdir(argument)://处理目录。如果os.path.isfile(参数):处理文件。也许这个? – user225312 2010-10-28 19:05:52