2010-05-17 3 views
6

에 대한 인수를 전달하지, 내가 할 :setuptools에 나는 내가 설치 한 후</p> <p>을 쓴 파이썬 스크립트 setuptools에 사용하고 entry_points

$ megazord -i input -d database -v xx-xx -w yy-yy 

나는 것처럼이 실행되는 경우가

을 ./like_this

그러나, 내가 얻을 : setuptools에 보이는

Traceback (most recent call last): 
    File "/usr/local/bin/megazord", line 9, in <module> 
    load_entry_point('megazord==1.0.0', 'console_scripts', 'megazord')() 
TypeError: main() takes exactly 1 argument (0 given) 

내 인수를 전송하지

entry_points = { 
    'console_scripts': [ 
     'megazord = megazord.megazord:main', 
     'megazord-benchmark = megazord.benchmark:main', 
     'megazord-hash = megazord.mzhash:main', 
     'megazord-mutate = megazord.mutator:main', 
     ] 
} 

어떤 아이디어 : 주에()

다음

내 setuptools에이 entry_points 위해 config (설정) 것 (optparse의에 의해) 구문 분석?

+0

윽이 있기 때문에. 신경 쓰지 마라, 나는 너무 빨리 말했다. –

+0

def main()에 여전히 잔여 argv가 있습니다. 웬일인지 전에 스크립트를 실행할 때 오류가 발생하지 않았습니다. –

답변

10

setuptools console_scripts 진입 점은 인수가없는 함수를 원합니다.

다행히도 optparse (명령 줄 옵션 용 파서)에는 인수를 전달할 필요가 없으므로 sys.argv [1 :]을 읽고 입력으로 사용합니다.

+1

Python 2.7에서 optparse는 [depparated] (https://docs.python.org/2/library/optparse.html)이며 [argparse] (https://docs.python.org/)를 사용합니다. 2/library/argparse.html) – HeyWatchThis

10

megazord.py의 전체 그림을 보려면 @Jeffrey Harris 제안을 사용하여 입력을 구문 분석하기위한 멋진 라이브러리를 사용하십시오.

import argparse 

def main(): 
    ''' Example of taking inputs for megazord bin''' 
    parser = argparse.ArgumentParser(prog='my_megazord_program') 
    parser.add_argument('-i', nargs='?', help='help for -i blah') 
    parser.add_argument('-d', nargs='?', help='help for -d blah') 
    parser.add_argument('-v', nargs='?', help='help for -v blah') 
    parser.add_argument('-w', nargs='?', help='help for -w blah') 

    args = parser.parse_args() 

    collected_inputs = {'i': args.i, 
        'd': args.d, 
        'v': args.v, 
        'w': args.w} 
    print 'got input: ', collected_inputs 

그리고 위처럼 그것을 사용하여, 하나는

$ megazord -i input -d database -v xx-xx -w yy-yy 
got input: {'i': 'input', 'd': 'database', 'w': 'yy-yy', 'v': 'xx-xx'} 

을 얻을 것이다 그들은 모두 선택적 인수,

$ megazord 
got input: {'i': None, 'd': None, 'w': None, 'v': None}