簡體   English   中英

argparse多個命令行如何知道

[英]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命名空間不包含有關命令字符串順序的信息。 getoptoptparse這樣的舊解析器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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM