Bir alt komutun varsayılan değerlerini geçersiz kılmak/genişletmek için global seçenekleri argparse.ArgumentParser nesnesinden kullanabilmek istiyorum.Genel seçenekler üzerinden argparse augment alt komut varsayılanları
bir örnek olur görüntülenir yardım aşağıdaki oyuncak örneğin küresel güncellemeleri, yani yansıtan be: Ben yardım modunda bu çalıştırdığınızda ben alacağı İdeal
import argparse
import os
import sys
# Global parser and options.
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("--user",
dest="user",
default=os.environ.get("USER"),
help="Override the setting of the $USER variable.")
# Sub-command parser and options.
subparsers = parser.add_subparsers()
command = subparsers.add_parser(
"command",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
command.add_argument("--config",
dest="config",
default="~%s/config" % os.environ.get("USER"),
help="The config file.")
options = parser.parse_args()
> python example.py --user thing command --help
usage: example.py command [-h] [--config CONFIG]
optional arguments:
-h, --help show this help message and exit
--config CONFIG The config file. (default: ~thing/config)
, yani yapılandırma dosyası yolu kullanıcıya özgüdür (şey). Varsayılan yapılandırmayı "~%(user)s/config"
olarak değiştirebileceğimi ve daha sonra seçenekler ad alanıyla çalışma zamanında çözebileceğimin farkındayım, ancak yardımın daha açık olmasını istiyorum. bu biraz hacky görünüyor olsa
if "--help" in sys.argv:
# Parse the command minus the help to obtain the global options.
args = sys.argv[1:]
args.remove("--help")
# Update the defaults with the global options.
options = parser.parse_args(args)
command.set_defaults(config="~%s/config" % options.user)
# Re-parse the options.
parser.parse_args()
, alternatif bir çözüm, küresel seçenekleri elde etmek kez argümanları ayrıştırmak yani çalışmak olacaktı toplamak. Daha iyi bir yaklaşım/çözüm var mı?
Teşekkür özelleştirilmiştir. Bu yaklaşım kesinlikle benim yaklaşımımdan çok daha temiz/yalın ve argparse olmadan denediğim bir yaklaşıma daha çok benziyor, yani argümanları iki kez ayrıştırıyor. Parse_known_args() 'ı, örneğin benim için çıkarmadan ziyade "--help" argümanı sağlandığında seçenekler (çıkmanın tersine) ile dönmek için nasıl alabileceğimi görmek için koda bakabilirim. – John
Oh, bunu unuttum. 'Parse_known_args()' argümanParser.exit' ('sys.exit' etrafında nispeten ince bir sarıcı olan) 'çağırdığında atacak 'SystemExit' istisnasını yakalayabilirsiniz. – chepner
Hey, evet bunu denedim, ancak try/except ile ilgili sorun, seçeneklerin tanımsız olmasıdır. – John