Aus*_*son 6 python distutils setuptools
我正在使用setuptools来编写我编写的Python脚本
安装后,我做:
$ megazord -i input -d database -v xx-xx -w yy-yy
Run Code Online (Sandbox Code Playgroud)
就像我运行它一样./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)
Run Code Online (Sandbox Code Playgroud)
看起来像setuptools不会将我的参数发送到要解析的main()(通过optparse)
这是我对entry_points的setuptools配置:
entry_points = {
'console_scripts': [
'megazord = megazord.megazord:main',
'megazord-benchmark = megazord.benchmark:main',
'megazord-hash = megazord.mzhash:main',
'megazord-mutate = megazord.mutator:main',
]
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Hey*_*his 14
只是为了全面了解一下它的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
Run Code Online (Sandbox Code Playgroud)
如上所述使用它,人们会得到
$ megazord -i input -d database -v xx-xx -w yy-yy
got input: {'i': 'input', 'd': 'database', 'w': 'yy-yy', 'v': 'xx-xx'}
Run Code Online (Sandbox Code Playgroud)
因为它们都是可选参数,
$ megazord
got input: {'i': None, 'd': None, 'w': None, 'v': None}
Run Code Online (Sandbox Code Playgroud)
Jef*_*ris 13
setuptools console_scripts入口点需要一个无参数的函数.
令人高兴的是,optparse (Parser for command line options)不需要传递任何参数,它将在sys.argv [1:]中读取并使用它作为它的输入.