Python

2016-03-30 23 views
2

'daki ArgumentParser ayrıştırılmış args'den arg dizesi oluşturma argparser.ArgumentParser ve parser.parse_args'dan döndürülen bir ad alanı varsa, ad alanını tekrar programa iletilebilecekleri bir argv listesine dönüştürmenin basit bir yolu var mı? ? Esas olarak, parse_args'ın tersi bir işlevi var mı?Python

bir örnek senaryo: Ararsam Yani

parser = argparse.ArgumentParser() 
parser.add_argument('--example', type=int, default=0) 
args = parser.parse_args(argv) 

args.example *= 2 
new_argv = parser.generate_argv(args) 

:

python my_program.py --example 1 

geri isteyeyim:

new_argv = ['--example', '2'] 
+2

; Bir argümanın 'type'ı herhangi bir keyfi dönüşüm fonksiyonu olabilir, bunlardan her biri için bir tersini oluşturmanız gerekir. –

+0

Neye ulaşmaya çalışıyorsunuz? Daha fazla doğrudan aramaya çalıştığınız her şeye erişemiyor musunuz? – jonrsharpe

cevap

3

ben değilim ama bu, daha önce istendi düşünüyorum iyi bir arama teriminden emin değilim.

bu soru çok uzakta olmadan önce (argparse ve sys.argv ararken bulunan)

argparse - Build back command line

, açık olalım. args=parser.parse_args(), args=parser.parse_args(sys.argv[1:]) ile aynıdır. Ancak, sys.argv[1:]'un bazı rasgele args üreteceğini bilmek istediğiniz durumlarda hayal edebiliyorum. Belki test için, belki başkasının kodunu sürdüğün için.

Bu, argparse kodunda böyle bir kod yok. Ancak sınırlı bir durumlar için tanımlanmış eylemlerden bilgi alabilir ve sys.argv'u oluşturabilirsiniz.

In [432]: parser = argparse.ArgumentParser()  
In [433]: parser.add_argument('--example', type=int, default=0) 
Out[433]: _StoreAction(option_strings=['--example'], dest='example', nargs=None, const=None, default=0, type=<type 'int'>, choices=None, help=None, metavar=None) 

tanımlanan Eylemler listesi:

In [435]: parser._actions 
Out[435]: 
[_HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None), 
_StoreAction(option_strings=['--example'], dest='example', nargs=None, const=None, default=0, type=<type 'int'>, choices=None, help=None, metavar=None)] 

ilgi birini seçin ve kimi öznitelikleri bakmak: Şimdi oluşturmak

In [436]: a1=parser._actions[-1] 
In [437]: a1.type 
Out[437]: int 
In [438]: a1.default 
Out[438]: 0 

args:

In [439]: args=parser.parse_args(['--example','1'])  
In [440]: args 
Out[440]: Namespace(example=1) 
In [441]: args.example *= 2 

A sim Yeni args'u kullanarak bir liste oluşturma eylemi ve Eylemden bilgi. Açıkçası, çalışma kodunun hangi eylemi kullanacağını anlaması gerekiyor. En yaygın türleri için str() yeterlidir.

In [442]: if args.example != a1.default: 
    .....:  print(['--example',str(args.example)]) 
    .....:  
['--example', '2'] 

Ya metavar özniteliği ile oynayabilir ve usage biçimlendirici: Bence var yok

In [445]: a1.metavar=str(args.example) 
In [446]: parser.print_usage() 
usage: ipython2.7 [-h] [--example 2] 
0

parser.parse_args (args) den args silmek

args [1] == örnek

args [2] == dize numarası

args.example == int sayı

from sys import argv 
parser = argparse.ArgumentParser() 
parser.add_argument('--example', type=int, default=0) 
args = parser.parse_args() 
print ([argv[1],args.example*2]) 

sonra

python my_program.py --example 1 
>>>['--example', 2] 
+0

Genel bir cevap arıyorum, bu özel örnek için değil. –

+0

@BenMorris tam olarak neye ihtiyacınız var? : D – Milor123