2014-12-10 116 views
6

其他參數我要完成這樣的事情:參數依賴於與Argparse

-LoadFiles 
    -SourceFile "" -DestPath "" 
    -SourceFolder "" -DestPath "" 
-GenericOperation 
    -SpecificOperation -Arga "" -Argb "" 
    -OtherOperation -Argc "" -Argb "" -Argc "" 

用戶應該能夠運行的東西,如:

-LoadFiles -SourceFile「somePath」 -DestPath 「somePath」

-LoadFiles -SourceFolder 「somePath」 -DestPath 「somePath」

基本上,如果您有-LoadFiles,則需要在之後具有-SourceFile或-SourceFolder。如果您有-SourceFile,則需要具有-DestPath等。

此鏈條是否可以用於其他參數所需的參數?如果沒有,我至少可以做些什麼,如果你有-SourceFile,你必須有-DestPath?

+1

http://bugs.python.org/issue11588探討增加一般相互依賴的測試方式,但直到被實現,最好的辦法是做自己的測試,解析後。 – hpaulj 2014-12-10 22:39:54

回答

5

您對您所創建的ArgumentParser實例調用parse_args後,它會給你一個Namespace對象。只要檢查其中一個參數是否存在,那麼另一個參數也必須存在。像:

args = parser.parse_args() 
if ('LoadFiles' in vars(args) and 
    'SourceFolder' not in vars(args) and 
    'SourceFile' not in vars(args)): 

    parser.error('The -LoadFiles argument requires the -SourceFolder or -SourceFile') 
0

這裏是一個示例,如果您指定--makeDependency,則會強制您指定--dependency和一個值。

這不是由argparse單獨完成,而是由稍後驗證用戶指定內容的程序完成。

#!/usr/bin/env python 
import argparse 
import sys 

parser = argparse.ArgumentParser() 
parser.add_argument('--makeDependency', help='create dependency on --dependency', action='store_true') 
parser.add_argument('--dependency', help='dependency example') 

args = parser.parse_args() 

if args.makeDependency and not args.dependency: 
    print "error on dependency" 
    sys.exit(1) 

print "ok!"