2012-07-16 21 views
9

[+-]a,b,c,d gibi bayraklar ayrıştırmak için argparse herhangi bir yolu var mı? Python argparse geçiş bayrakları

foo.py +s -b 

, Windows attrib veya Linux chmod tarafından yapılan çok gibi, b arasında dest içinde s ve False dest True saklamalısınız.

Şu anda, +s ve store_true ve store_false ile -s olmak üzere 2 ayrı bağımsız değişken kullanıyorum. Ama iki kez her bayrak listeleme onunla çirkin bir yardım (+ a & -a) oluşturur

Başka bir geçici çözüm, el nasılsa çok daha kolay görünüyor (regex ile genişletilmiş arg ayrıştırmak ve özel tanımını kullanmak olacaktır

ama sadece kendisi argparse kullanarak aynı şeyi gerçekleştirmek hangi kullanarak bir şey olup olmadığını etrafa bakmak istediğini yapmadan önce.

tek add_argument çağrısına hem -s ve +s geçen ve özel bir eylem kullanarak bunu yapabilirsiniz

cevap

5

:

class ToggleAction(argparse.Action): 
    def __call__(self, parser, ns, values, option): 
     setattr(ns, self.dest, bool("-+".index(option[0]))) 
ap = ArgumentParser(prefix_chars='-+') 
ap.add_argument('-s', '+s', action=ToggleAction, nargs=0) 

ap.parse_args(['+s']) 
Namespace(s=True) 

ap.parse_args(['-s']) 
Namespace(s=False) 
+0

Harika, bir şekilde 'eylem' anahtarının olacağını düşündüm ama bir Eylem sınıfını tanımlamaktan kaçtı. – nbaztec

İlgili konular