代码之家  ›  专栏  ›  技术社区  ›  sdot257

如果给定值,则忽略optparse

  •  2
  • sdot257  · 技术社区  · 14 年前

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

    将以下文件同步到目标

    myscript.py filename
    

    将以下文件夹同步到目的地(所有这些都在函数i create中解决)。

    myscript.py -f foldername
    

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

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

    3 回复  |  直到 14 年前
        1
  •  0
  •   NorthIsUp    14 年前

    我总是喜欢直截了当,但你可以打断别人的话。

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

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

        3
  •  0
  •   Garrett Hyde NeilP    14 年前

    parser.parse_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