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.