2017-04-03 74 views
0

我有以下代碼:如何使用python中的點擊命令行程序來分離運行不同腳本的命令參數?

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) 

在命令行中我希望能夠做一些類似如下:

python clicktest.py cli initdb 

,並具有以下在終端恰巧呼應:

Initialized the database 

或者進入終端:

python clicktest.py cli dropdb 

,並具有以下發生在終端上:

Dropped the database 

我的問題是目前我做這在終端的時候:

python clicktest.py cli initdb 

什麼也沒有發生在終端,不執行打印作業時,我想應該有一些東西,即'初始化數據庫'的回聲。我究竟做錯了什麼??

回答

0

首先,你應該喜歡命令行中使用它:

python clicktest.py initdb 
python clicktest.py dropdb 

而在你clicktest.py文件,將這些線在你的代碼的底部:

if __name__ == '__main__': 
    cli() 

除非,你的代碼贏沒有工作。

編輯:

如果你真的想要的方式python clicktest.py cli initdb使用它,那麼你有另一種選擇:

@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() 
相關問題