setuptools的不传递参数的entry_points

问题描述 投票:6回答:2

我使用setuptools的一个Python脚本我写的

安装完成后,我做的:

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

就像我想,如果我跑这./like_this

不过,我得到:

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)

它看起来像setuptools的是不是送我的论点给main()被解析(由optparse)

这里是我的setuptools配置为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',
        ]
}

有任何想法吗?

python setuptools distutils
2个回答
13
投票

该setuptools的console_scripts切入点想要的参数的函数。

令人高兴的是,optparse(分析器命令行选项)并不需要传递任何参数,它会在sys.argv中读[1:]和使用,作为它的输入。


14
投票

为了给的megazord.py将是什么样子,使用@Jeffrey哈里斯建议使用一个不错的库解析输入的全貌。

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}
© www.soinside.com 2019 - 2024. All rights reserved.