在Python中使用Click命令

在Python中使用Click命令,python,command-line-interface,python-click,Python,Command Line Interface,Python Click,我有一个Python程序,我想使用以下命令运行它: myprogram --readpower=some argument 代码 我面临的问题是,指挥部- myprogram --readpower = some argument 不起作用。我必须将命令编写为: myprogram read_csv --readpower = some argument Click实际上是在做它应该做的事情。您创建了一个组cli,并添加了单个命令read\u csv。因此,click需要知道命令以知道调用

我有一个Python程序,我想使用以下命令运行它:

myprogram --readpower=some argument
代码 我面临的问题是,指挥部-

myprogram --readpower = some argument
不起作用。我必须将命令编写为:

myprogram read_csv --readpower = some argument

Click实际上是在做它应该做的事情。您创建了一个组
cli
,并添加了单个命令
read\u csv
。因此,click需要知道命令以知道调用什么,因为可能会有更多甚至是嵌套的命令。您可以创建一个独立的单击命令
read_csv
,并将其注册到
setup.py
文件中,如下所示:

# app.py
import click

# as a standalone command
@click.command()
@click.option('--readpower', type=str, default="")
def read_csv(readpower):
    click.echo("doing stuff...")
    if readpower:
        click.echo("reading {}...".format(readpower))

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

@cli.command()
def do_stuff():
    click.echo("doing stuff...")

# as a subcommand in a group
@cli.command()
@click.option('--readpower', type=str, default="")
def read_csv(readpower):
    click.echo("doing something...")
    if readpower:
        click.echo("reading {}...".format(readpower))
以及设置:

# setup.py
from setuptools import setup

setup(
    name='app',
    version='0.1',
    py_modules=['app'],
    install_requires=['Click'],
    entry_points='''
        [console_scripts]
        read_csv=app:read_csv
        cli=app:cli
    ''',
)

因此,您可以为应用程序设置多个入口点,并将多个独立命令与分组(甚至可能是嵌套)命令混合使用。

只需删除组,因为您不需要它。直接使用命令,如:

代码: 测试代码:
我在“setup.py”中做了其他一些事情,这样我就可以使用“myprogram”这个名称来运行脚本,而不是使用python脚本的名称
# setup.py
from setuptools import setup

setup(
    name='app',
    version='0.1',
    py_modules=['app'],
    install_requires=['Click'],
    entry_points='''
        [console_scripts]
        read_csv=app:read_csv
        cli=app:cli
    ''',
)
import click
import sys

@click.command()
@click.option('--version', is_flag=True, default=False,
              help='Prints out pyisg package version being used')
@click.option('--readpower', type=str, default="",
              help='Path of the csv file which is to be read)')
def cli(version, readpower):
    """
    This utility is used to convert a CSV file to JSON file
    """
    if version:
        click.echo("This is version 1.0 software")
        sys.exit()

    if readpower != '':
        click.echo("reading power {}".format(readpower))
if __name__ == "__main__":
    cli('--readpower=3'.split())
    cli('--version'.split())