2016-07-18 11 views
0

args管理にgetopsを使用していて、何らかの理由でmy -s変数が機能しません。私のコードは、だけでなく、以下の私はgetoptsがPythonで不思議な動作をする

try: 
    opts, args = getopt.getopt(sys.argv[1:], "hadsp:v", ["help", "all", "display", "single=", "present="])#, "search="]) 
except getopt.GetoptError as err: 
    print(err) 
    print "Exiting now, no options entered" 
    help() 
    sys.exit(2) 

if len(opts) == 0: 
    print "No options passed" 
    help() 

print opts 
print args 

for o, a in opts: 
    if o in ("-h", "--help"): 
    help() 
    elif o in ("-p", "--present"): 
    search(a) 
    elif o in ("-a", "--all"): 
    all_install() 
    elif o in ("-s", "--single"): 
    if a == '': 
     print "crap" 
     sys.exit(2) 
    single_install(a) 
    elif o in ("-d", "--display"): 
    display() 
    else: 
    print "Exiting now, unknown option" 
    help() 
    sys.exit(2) 

を取得しています出力され、私はプログラムの実行時に出力が

[('-s', '')] 
['test'] 
crap 

です:なぜこれが起こっている

python file.py -s test 

わからないが、助けてくれてありがとう。

+0

argparseは、余分な括弧と括弧を含む2行の終わりにいくつかの嫌なものは、あります –

+0

、簡単かつ安全に使用できます。不思議なことに、通訳は文句を言わない。 –

+0

あなたは 'hadsp:v'の代わりに' hads:p:v'引数を使いたいと思います。 's'の後のコロンは、このスイッチが引数をとることを指定します。 –

答えて

1
import argparse 

argParser = argparse.ArgumentParser() 
argParser.add_argument(
     '-p', '--present', dest='present', help='write help here for this parameter') 

args = argParser.parse_args() 

if args.present: 
    search(a) 

Saあなたはgetoptのを使用したい場合は -h(または)--helpを管理し、使用する方が簡単である、argparse使用するmpleコードがargparse

ための作り付けのオプションで、

オプションを解析するためのマニュアルを参照してください

https://docs.python.org/2/library/getopt.html

>>> import getopt 
>>> args = '-a -b -cfoo -d bar a1 a2'.split() 
>>> args 
['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] 
>>> optlist, args = getopt.getopt(args, 'abc:d:') 
>>> optlist 
[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')] 
>>> args 
['a1', 'a2'] 
関連する問題