[英]python - argparse multiple command-line how to know
我想將argparser模塊與多個命令行一起使用,其中一些應該沒有參數。
例:
parser.add_argument('-website', type=str, nargs='*')
parser.add_argument('-auth', type=str, nargs='*')
parser.add_argument('-dothis', action='store_true')
所以我想在命令行中調用以下命令:
- python script.py -website www.website.com www.website2.com -dothis
在這種情況下,-dothis命令應僅用於第二個網站,而不能用於第一個網站,而應同時用於兩個網站。
另一個例子:
-python script.py -website www.website1.com www.website2.com -auth username/password
在這種情況下,第二個網站具有第一個網站的身份驗證。
所以我想要的是:
- python script.py www.webstie1.com -dothis www.website2.com -auth u:p -dothis www.website3.com -auth u:p www.website4.com
要么:
- python script.py -site www.website1.com -auth u:p -site www.website2.com -site www.website3.com -auth u2:p2
那么我的腳本如何知道哪個網站的身份驗證?
我該如何解決?
您的示例不一致。 一個具有“ -website”和2個值,另一個具有“ -site”重復(附加動作?),第三個具有重復的位置。
您的目標遇到了argparse的幾個基本問題:
usage
沒有顯示交互的規定 我可以編寫一組自定義Action類,以執行所需的交互。 但是你真的有興趣嗎?
argparse
的基本解析策略是按順序處理“位置”,但是“可選”(帶有標記的)參數可以按任何順序出現。 因此,生成的args
命名空間不包含有關命令字符串順序的信息。 像getopt
和optparse
這樣的舊解析器optparse
更好,因為它們專注於收集可選參數,並將其余部分作為未區分的列表返回。
自定義Action類的sys.argv
自己解析sys.argv
。 只是遍歷字符串。 沒有'-'的字符串是一個站點; 以下任何“-”標志均適用於該網站等。
所需的API的一個變種是將“ --website”定義為接受多個參數的append
。
parser.add_argument('--website','-w','--site',dest='site',nargs='+',action='append',
help='website plus flags; may repeat')
可能的命令行和命名空間:
--site www.webwsite.com dothig --site www.website2.com
NS(site=[['www.website.con','dothis'],['website2']])
--site site1 username/pass --site site2
NS(site=[['site1','username/pass'],['site2']])
因此,對於args.site
每個元素,您可以將第一項解釋為站點名稱,然后解析其余內容以找到dothis
標志和auth
名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.