2011-03-23 3 views
0

옵션/인수로 프로그램 실행 중에 선택한 함수가 어떻게 결정됩니까? 예를 들어, 옵션에 따라 두 가지 옵션이 있는데, 각각의 기능을 사용하고 싶습니다. 내가 뭘 놓치고 있니?사용 된 옵션에서 실행할 함수 결정

import os, sys, glob 
from optparse import OptionParser 

def fname(arguments): 
    files = [] 
    for arg in arguments: 
     if '*' in arg or '?' in arg: 
      # contains a wildcard character 
      files.extend(glob.glob(arg)) 
     elif os.path.isdir(arg): 
      # is a dictionary 
      files.extend(glob.glob(os.path.join(arg, '*'))) 
     elif os.path.exists(arg): 
      # is a file 
      files.append(arg) 
     else: 
      # invalid? 
      print '%s invalid' % arg 
    return files 

# check if file exists locally, if not: download it 
def downnload(filename, keyString): 
    if not os.path.exists(filename+keyString): 
     l.get_contents_to_filename(filename+keyString) 

# List bucket contents 
def blist(bucket): 
    for b in rs: 
     print b.name 

def main(): 
    usage = "usage: %prog [options] -f filename" 
    parser = OptionParser(usage) 
    parser.add_option('-d', '--download', 
      action='store', dest='download', 
      default=None, help='download files from cloud') 
    parser.add_option('-l', '--list', 
      action='store', dest='bucket', 
      default=None, help='list buckets or contents of specified bucket') 

    if len(sys.argv) == 1: 
     parser.print_help() 
     sys.exit() 
    (options, args) = parser.parse_args() 

    # from boto import 
    bucket_list = bucket.list() 
    for l in bucket_list: 
     keyString = str(l.key) 

    downnload(options.filename, keyString) 
    blist(options.bucket) 

if __name__ == '__main__': 
    main() 

답변

1

당신은 많은 누락되었습니다.

  1. 여기에 filename 값이 있습니까?
  2. 여기에 keyString 값이 있습니까?
  3. 여기에 bucket 값이 있습니까?
  4. 당신은 원시 형 당신은 아마 optparse tutorial보고 싶지

에게 것을 때문에 함수 list 이름을해서는 안된다. --list 명령 줄 인수에서 값을 받으려면 bucket이 필요하다고 가정합니다. 대신 값은 options.bucket에 저장됩니다. 그것은 단지 시작에 불과합니다.

main의 끝을 변경하여 옵션을 확인하고 적절한 기능을 호출하고 싶다고 생각합니다. 예 :

def main(): 
    # much omitted 
    if options.filename is not None: 
     downnload(options.filename, keyString) 
    elif options.bucket is not None: 
     blist(options.bucket) 
    else: 
     print 'Either --download or --list is required.' 
     parser.print_help() 
     sys.exit(-1) 

나는 이것이 당신이 찾고있는 것이라고 생각합니다. 전달 된 명령 줄 인수를 기반으로 호출 할 함수를 결정합니다. 예를 들어 사용자가 --download filename을 전달하면 downnload 함수가 제공된 파일 이름을 인수로 호출됩니다.

+0

blist로 목록을 변경하여 options.x를 사용하는 함수를 업데이트했으며, 인수는 일부 옵션에서는 선택 사항 일 수 있으며 다른 옵션에서는 필요합니까? – Astron

+0

질문의 마지막 부분을 알지 못했습니다. 네, [ "부울 옵션 처리하기] 섹션을보십시오 (http://docs.python.org/library/optparse.html?highlight=optparse#handling-boolean-flag-options) –

+0

좋은 아이디어, 그거 한 번 줘봐, 고마워! – Astron

관련 문제