1

次のように別のスクリプトを呼び出すdjangoのカスタムコマンドがあります。

import script

from optparse import make_option
from django.core.management.base import BaseCommand

class Command(BaseCommand):

    option_list = BaseCommand.option_list + (
        make_option(
            "-f", 
            "--files", 
            dest = "files",
            help = "add files to list",
            action='store_true',
            default=False
        ),

        # Some more options here
    )

    def handle(self, *args, **options):
        script.main(files=options['files'])

私のカスタム スクリプトも使用しoptparseます。こんな感じです。

from optparse import OptionParser

opts = OptionParser()
opts.add_option('-f', '--files', dest='files', action='store_true', default=false, help='file help message')
opts = opts.parse_opts()[0]

FILE = opts.file

def main(files=false):
    opts.files = files
    # Do the processing

コマンドを実行しようとすると、常にオプションとして と のみを使用python manage.py command --option-other-than-fileしてヘルプメッセージが出力されます。また、オプションのヘルプ メッセージは、コマンド ファイルではなく、インポート スクリプトで定義されたものです。また、それを使用してオプションを印刷しようとすると、同じメッセージが表示されます。オプションがどのようにオーバーライドされているかのようです。何が起こっているのか誰か教えてください。ありがとう。--help--file--filespython manage.py command --help

編集

これがクラスへのコードですBaseCommand

4

1 に答える 1

1

コマンドを最初に実行すると、行を含む のimport script最上位にあるすべてのコードが実行されます。optparse が同じプロセスでこのような 2 つの連続した呼び出しを許可することになっているとは思いません。script.pyopts.parse_opts()

script.pyoptparse 部分を節に移動するだけif __name__ == '__main__':で、モジュールとして使用するときに起動しないので問題ありません。

于 2013-06-26T14:48:17.270 に答える