2014-04-03 7 views
19

'dan almak Tüm kalan kullanılmayan bağımsız değişkenleri bir kerede almak istiyorum. Nasıl yaparım?Geriye kalan argümanları argparse

parser.add_argument('-i', action='store', dest='i', default='i.log') 
parser.add_argument('-o', action='store', dest='o', default='o.log') 
+0

I Ne sorduğunu tam olarak anlama. Argparse tarafından ayrıştırılmayan tüm komut satırı argümanlarını mı istiyorsunuz? – SingleNegationElimination

+1

'parser.add_arguments' kullanarak almadığım tüm argümanları almak istiyorum. – ggoha

cevap

7

Başka bir seçenek de ayrıştırıcı bir pozisyonel argüman eklemektir. Öncelikli tire olmadan seçeneği belirtin ve argparse, başka bir seçenek tanınmazsa onları arar. Bu sahiptir komut için yardım metni iyileştirme yararı:

>>> parser.add_argument('otherthings', nargs='*') 
>>> parser.parse_args(['foo', 'bar', 'baz']) 
Namespace(i='i.log', o='o.log', otherthings=['foo', 'bar', 'baz']) 

ve

>>> print parser.format_help() 
usage: ipython-script.py [-h] [-i I] [-o O] [otherthings [otherthings ...]] 

positional arguments: 
    otherthings 

optional arguments: 
    -h, --help show this help message and exit 
    -i I 
    -o O 
36

Kullanım parse_known_args():

args, unknownargs = parser.parse_known_args() 
+2

anahtarında varsayılanın benzetimi Bu, bilinmeyen bağımsız değişkenlerin önceliği olduğunda yardımcı olur. Örneğin bunları başka bir komut dosyasına geçiriyorsunuz. – Core

+0

* Bu cevap kabul edilen cevap olmalı! – MLu

+0

Çakışan argüman adlarını sarma yaptığınız bir komutla aktarmaya izin vermek istiyorsanız, örneğin "docker-compose-wrapper.py --help" ve "docker-compose-wrapper.py exec --help" – pdd

10

Kullanım argparse.REMAINDER:

parser.add_argument('rest', nargs=argparse.REMAINDER) 

Örnek uzanan davanız:

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('-i', action='store', dest='i', default='i.log') 
parser.add_argument('-o', action='store', dest='o', default='o.log') 
parser.add_argument('rest', nargs=argparse.REMAINDER) 
parser.parse_args(['hello', 'world']) 
>>> Namespace(i='i.log', o='o.log', rest=['hello', 'world']) 
+0

Bu, IMO'nun başka bir komutu sarmaladığınız durumlar için en iyi çözümdür: 'wrapper.py --help' -> Yardım metniniz ' sarıcı.py bazı hatalar --help' -> Geçti sarılmış komut – pdd