2017-04-03 3 views
0

私は次のコードを持っている:別のスクリプトを実行するコマンドパラメータを分離するpythonをクリックしてコマンドラインプログラムを作成するにはどうすればよいですか?

python clicktest.py cli initdb 

と、次は、端末にエコー起こる持っている:

私は、次のような何かを行うことができるようにしたいコマンドラインで

import click 

@click.group() 
def cli(): 
    pass 

@click.command() 
def initdb(): 
    click.echo('Initialized the database') 

@click.command() 
def dropdb(): 
    click.echo('Dropped the database') 

cli.add_command(initdb) 
cli.add_command(dropdb) 

Initialized the database 

または端末に入る:

python clicktest.py cli dropdb 

と、次は、端末上で起こるがあります。私はターミナルでこれを行うとき

Dropped the database 

私の問題は、現在、次のとおりです。私が考えるとき

python clicktest.py cli initdb 

何も、ターミナルで何も印刷が起こりません何か、すなわち 'Initialized Database'エコーが必要です。私は何を間違えているのですか?あなたのコードが勝った場合を除き、

if __name__ == '__main__': 
    cli() 

:あなたのコードの下部にこれらの行を置き、

python clicktest.py initdb 
python clicktest.py dropdb 

そして、あなたのclicktest.pyファイル内:

答えて

0

まず、次のようなコマンドラインでそれを使用する必要があります仕事をしない。

EDIT:

@click.group() 
def main(): 
    pass 

@click.group() 
def cli(): 
    pass 

@click.command() 
def initdb(): 
    click.echo('Initialized the database') 

@click.command() 
def dropdb(): 
    click.echo('Dropped the database') 

cli.add_command(initdb) 
cli.add_command(dropdb) 
main.add_command(cli) 

if __name__ == '__main__': 
    main() 

または(代わりにデコレータを使用して)さらに良い:

@click.group() 
def main(): 
    pass 

@main.group() 
def cli(): 
    pass 

@cli.command() 
def initdb(): 
    click.echo('Initialized the database') 

@cli.command() 
def dropdb(): 
    click.echo('Dropped the database') 

if __name__ == '__main__': 
    main() 

あなたが本当にやり方python clicktest.py cli initdbでそれを使用したい場合は、別の選択肢を持っています

関連する問題