1
當使用argparse時,我該如何確定某些東西是位置參數,可選參數還是子命令?是否有使用argparse的規則?
當使用argparse時,我該如何確定某些東西是位置參數,可選參數還是子命令?是否有使用argparse的規則?
A 位置參數通常是要求。例如,如果你的程序總是需要傳遞一個文件來讀取,那麼該文件將是一個位置的參數。
安可選參數是,毫不奇怪,可選。這可能是一個參數,可以有一個理智的默認值(即您的程序默認爲在端口8080
上運行,但可以接受其他端口),也可能是打開可選行爲的標誌(即verbose
標誌)。
A 子分析器通常用於當您要將一整套不同的命令添加到單個腳本時。也許你的腳本可以讀取或寫入文件,並且read
和write
操作期望不重疊的各種標誌。在這種情況下,爲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
首先,決定你想要什麼。接下來,你使用'argparse'。全取決於你。 – zondo
是否有規則或最佳實踐或什麼? – polka
對需要的東西使用位置參數。對於不需要的東西使用可選參數。不幸的是,我不知道「子命令」是什麼意思。 – zondo