Bir tire ile argparse seçeneklerine sahip olmak


154

Ben argparse modülünde bazı öznitelik var --pm-exportgibi args.pm-exporthata alıyorum gibi kullanmaya çalıştığınızda gibi bazı seçenekler istiyorum pm. Bu sorunu nasıl çözebilirim? -Komut satırı seçeneklerine sahip olmak mümkün müdür ?

Yanıtlar:


226

Dokümanlarda belirtildiğiargparse gibi :

İsteğe bağlı bağımsız değişken eylemleri için, dest değeri normalde seçenek dizelerinden çıkarılır. ArgumentParser, ilk uzun seçenek dizesini alıp ilk --dizeyi çıkararak dest değerini üretir . Herhangi iç -karakterler dönüştürülecektir _karakterler emin dizesini olmak için geçerli bir özellik adı

Yani kullanmalısın args.pm_export.


108

Maalesef, kısa çizgiden alt çizgiye değiştirme, aşağıdaki --gibi konum öğeleri (ön ekli değil ) için çalışmaz

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('logs-dir',
                    help='Directory with .log and .log.gz files')
parser.add_argument('results-csv', type=argparse.FileType('w'),
                    default=sys.stdout,
                    help='Output .csv filename')
args = parser.parse_args()
print args

# gives
# Namespace(logs-dir='./', results-csv=<open file 'lool.csv', mode 'w' at 0x9020650>)

Bu nedenle, yardımda nasıl görünmesi gerektiğini ayarlamak için add_argument()özellik adı ve metavarkwarg olarak 1'inci argümanı kullanmalısınız :

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('logs_dir', metavar='logs-dir',
                    nargs=1,
                    help='Directory with .log and .log.gz files')
parser.add_argument('results_csv', metavar='results-csv',
                    nargs=1,
                    type=argparse.FileType('w'),
                    default=sys.stdout,
                    help='Output .csv filename')
args = parser.parse_args()
print args

# gives
# Namespace(logs_dir=['./'], results_csv=[<open file 'lool.csv', mode 'w' at 0xb71385f8>])

7
İlgili Python hata raporu: bugs.python.org/issue15125 . argparsekullanır setattrve getattrbu nedenle destadların geçerli dotöznitelik adları olması gerekmez . Kullanıcı ayrıca kullanabilir getattr.
hpaulj

5
Sadece yapardımpositional_arg = getattr( parser, 'positional-arg' )
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功

1
Tam olarak ihtiyacım olan şey - Geriye doğru yaptım metavarve neden çalışmadığını anlayamadım. Teşekkürler!
dwanderson

17

Kısa çizgiler alt çizgilere dönüştürülür:

import argparse
pa = argparse.ArgumentParser()
pa.add_argument('--foo-bar')
args = pa.parse_args(['--foo-bar', '24'])
print args # Namespace(foo_bar='24')

4
Yalnızca isteğe bağlı bağımsız değişkenler için. Kısa çizgilerini saklamak için gerekli olanlar, bu yüzden onları erişilebilir hale getirmek için bir alt çizgi gerektirir.
22'de n00dle
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.