12

私が書いたPythonスクリプトにsetuptoolsを使用しています

インストール後、私は次のことを行います。

$ 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が(optparseによって)解析されるmain()に私の引数を送信していないように見えます

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',
        ]
}

何か案は?

4

2 に答える 2

20

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}
于 2014-05-20T14:56:29.420 に答える
14

setuptoolsのconsole_scriptsエントリポイントには、引数のない関数が必要です。

幸い、optparse (コマンドラインオプションのパーサー)に引数を渡す必要はありません。sys.argv[1:]を読み取り、それを入力として使用します。

于 2010-05-18T00:42:39.300 に答える