Alt komutlar işlevlerini simüle etmek için ayrıştırıcımın altparterlerini ekliyorum (örneğin, bkz: Simple command line application in python - parse user input?). Şimdi argüman almayan ve ekli bir "çık" eylemine sahip bir quit
altparser/komutu eklemek istiyorum. Mümkün mü ? Bu konuda nasıl gidebilirim?python argparse - argüman olmadan alt parşömene eylem ekleyin?
11
A
cevap
13
subcommands
belgelerine, altparser tanımlamak için iki örnek verir.
Bir
https://docs.python.org/dev/library/argparse.html#sub-commands
vermektiradd_subparsers
bir
dest
:
def do_quit(args):
# action
quit()
parser = ArgumentParser()
subparser = parser.add_subparsers(dest='cmd')
....
subparser.add_parser('quit')
...
args = parser.parse_args()
print args.cmd # displays 'quit'
if args.cmd == 'quit':
do_quit(args)
diğer bir fonksiyonu olan subparser bağlamak için set_defaults
kullanmaktır:
parser = ArgumentParser()
subparsers = parser.add_subparsers()
...
parser_quit = subparsers.add_parser('quit')
parser_quit.set_defaults(func=do_quit)
...
args = parser.parse_args()
args.func(args)
Açık daha fazla düşündüm, İşte özel bir Action
kullanarak bir yol. _HelpAction
(-h
tarafından kullanılan) gibidir. nargs=0
(veya '?') Ile konumsal argüman olarak adlandırılır. Böyle bir argüman her zaman çağrılır, buna uygun dizeler olmamasına rağmen (ya da 0 dizgiler eşleşir). Bu, pozisyonların nasıl ele alındığının mantıklı, ama biraz belirsiz bir sonucudur. (Ipython çalıştırmak)
class QuitAction(argparse.Action):
def __call__(self, parser, *args, **kwargs):
parser.exit(message="QUITTING\n")
p=argparse.ArgumentParser()
sp=p.add_subparsers(dest='cmd')
p1=sp.add_parser('quit')
p1.add_argument('foo', action=QuitAction, nargs='?', help=argparse.SUPPRESS)
p.parse_args(['quit'])
üreten:
QUITTING
An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
İlgili konular
- 1. ArgParse Python Modülü: Varsayılan argüman için varsayılan argüman değerini değiştir
- 2. Python argparse
- 3. Python argparse isteğe bağlı alt argümanlar
- 4. Argparse python, yardım menüsünde
- 5. Python - Argparse
- 6. Python argparse geçiş bayrakları
- 7. Argparse ve python ile argüman olarak bir sözlüğü kabul etme
- 8. argparse modülünü kullanarak dosyayı argüman olarak python betiğinde nasıl geçirebilirim?
- 9. Python argparse önceden tanımlanmış bir argüman dizgisi ile nasıl kullanılır?
- 10. kullanın ya bir bayrak argüman veya argparse
- 11. Argüman konum argümanlarını argümanlarla argparse edebilir mi?
- 12. argparse Python modülleri cli'de
- 13. Python argparse: İstenen seçenek
- 14. python argparse seçimleri varsayılan seçenek
- 15. Python argparse, bağımsız değişken değeri
- 16. Raylar: denetleyiciye bir eylem ekleyin
- 17. Python 2.7 argparse: Tek bayrak
- 18. Harici xib olmadan storyboard kullanarak alt görünüm ekleyin
- 19. Tipografi Argparse - python kullanırken Ayrıştırıcı nesnesine dize
- 20. argparse: hangi alt toplayıcının kullanıldığını tanımlayın
- 21. Ruby'de argüman olmadan DSL bloğu
- 22. Python argparse türü ve nargile ile seçim kısıtlamaları> 1
- 23. argparse - isteğe bağlı argüman için 2 değeri veya hiçbiri gerekmiyor
- 24. Python argparse: Nargilerde bir aralık belirtmenin bir yolu var mı?
- 25. Argparse subparser: komut listesinde metavar'ı gizle
- 26. Python fonksiyon argüman listesi
- 27. Python 2.6'da nasıl argparse alabilirim?
- 28. Python argparse ile gizli bağımsız değişkenler oluşturma
- 29. Python argparse required = Doğru ama --version işlevi?
- 30. Bu üç olgu ayırt etmek istediğiniz argüman
teşekkürler! Bağlantılı bir koda bakarsanız: http://stackoverflow.com/questions/25332925/simple-command-line-application-in-python-parse-user-input/25368374#25368374 otomatik olarak ayrıştırma - ayrıştırıcı dışında mantık eklemek istemiyorum. Başka yol yok ? Ana ayrıştırıcıya "bırakma" argümanı ekleyebilir miyim (''quit' olanı değil)? edit: [github] (https://github.com/Utumno/psync/blob/master/watcher/cli.py) –
Elbette - "parse_args" öğesini yeniden tanımlayan bir "ArgumentParser" alt sınıfı. İlk önce super(). Parse_args' (veya 'parse_known_args') olarak adlandırılır ve sonra 'ayrıştırıcının dışındaki mantığı' gerçekleştirir. Sadece bu yöntem tanımının ardında gizlenmiş olanı tam olarak bilirsiniz. – hpaulj
İsteğe bağlı bir bağımsız değişken kullanarak bir yöntem ekledim. – hpaulj