2010-05-17 14 views
6

sto usando setuptools per uno script Python che ho scrittosetuptools non il passaggio di argomenti per entry_points

Dopo l'installazione, lo faccio:

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

come farei se stavo correndo si ./like_this

Tuttavia, ottengo:

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) 

che assomiglia setuptools non sta inviando i miei argomenti a main() per essere analizzato (da optparse)

Ecco la mia setuptools Config per entry_points:

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

Tutte le idee?

+0

Ugh. Non importa, ho parlato troppo presto. –

+0

Ho ancora un resto argv in def main(). Per qualche ragione, non mi ha dato un errore quando ho eseguito lo script in precedenza. –

risposta

10

Il punto di ingresso console_scripts di setuptools desidera una funzione senza argomenti.

Fortunatamente, optparse (Parser per le opzioni della riga di comando) non è necessario passare alcun argomento, verrà letto in sys.argv [1:] e verrà utilizzato come input.

+1

Nota a margine che a partire da Python 2.7, optparse è [depracated] (https://docs.python.org/2/library/optparse.html) a favore di [argparse] (https://docs.python.org/ 2/library/argparse.html) – HeyWatchThis

10

Solo per dare un'immagine completa di come sarebbe il megazord.py utilizzando il suggerimento di @Jeffrey Harris di utilizzare una bella libreria per analizzare gli input.

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 

E con l'utilizzo di esso, come in precedenza, si potrebbe ottenere

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

E dal momento che sono tutti argomenti opzionali,

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