2016-04-28 70 views
1

當使用argparse時,我該如何確定某些東西是位置參數,可選參數還是子命令?是否有使用argparse的規則?

+0

首先,決定你想要什麼。接下來,你使用'argparse'。全取決於你。 – zondo

+0

是否有規則或最佳實踐或什麼? – polka

+0

對需要的東西使用位置參數。對於不需要的東西使用可選參數。不幸的是,我不知道「子命令」是什麼意思。 – zondo

回答

3

A 位置參數通常是要求。例如,如果你的程序總是需要傳遞一個文件來讀取,那麼該文件將是一個位置的參數。

可選參數是,毫不奇怪,可選。這可能是一個參數,可以有一個理智的默認值(即您的程序默認爲在端口8080上運行,但可以接受其他端口),也可能是打開可選行爲的標誌(即verbose標誌)。

A 子分析器通常用於當您要將一整套不同的命令添加到單個腳本時。也許你的腳本可以讀取或寫入文件,並且readwrite操作期望不重疊的各種標誌。在這種情況下,爲read操作分配一個子分析器併爲write操作分配一個子分析器以簡化對這些標記的分析。

大多數簡單的程序都希望保留位置和可選參數:通常您會知道何時需要使用子分析器。

這是一個使用所有三個(很做作)的示例程序:

import argparse 

def parse_args(): 
    p = argparse.ArgumentParser() 
    p.add_argument("filename", help="Filename to interact with") 
    p.add_argument("-v", "--verbose", action="store_true", help="Turn on verbose mode") 

    subparsers = p.add_subparsers(title="Commands", dest="command") 

    read_p = subparsers.add_parser("read", help="read from FILENAME") 

    load_p = subparsers.add_parser("load", help="load from FILENAME") 
    return p.parse_args() 

if __name__ == "__main__": 
    args = parse_args() 

下面是它的說明文字:

usage: foo.py [-h] [-v] filename {read,load} ... 

positional arguments: 
    filename  Filename to interact with 

optional arguments: 
    -h, --help  show this help message and exit 
    -v, --verbose Turn on verbose mode 

Commands: 
    {read,load} 
    read   read from FILENAME 
    load   load from FILENAME