如果给出值,则忽略optparse

时间:2010-10-28 18:45:26

标签: python

我希望能够传递参数,而无需为optparse指定选项。如果我确实传递了一个选项,那么它必须是一个已知选项,否则脚本将失败。

将以下文件转发到目的地

myscript.py filename

将以下文件夹转发到目的地(所有这些都在我创建的功能中找到)。

myscript.py -f foldername

原因是,我有一个与“foldername”联系的数组(或词典)。如果未传递任何选项,则CLI中给出的参数是位于用户调用脚本的工作文件夹中的文件。传递-f意味着上传其值存储在dict中的文件夹(用户可以在任何目录中,此文件夹的路径是提前知道的。)

我最好为这两个选项添加选项吗? -f用于文件,-v用于文件夹aka版本?

3 个答案:

答案 0 :(得分:0)

我总是喜欢明白,但你可以短路optparse。

# args[0] is always the executable's name
if len(args) > 1:
    parser.parse_args(args, options)
else:
    #open file

答案 1 :(得分:0)

-f视为没有参数的选项,并使用它来切换位置参数的行为(即foldername)。

答案 2 :(得分:0)

parser.parse_args()始终返回两个值:

  • options ,一个包含所有选项值的对象
  • 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