Python 单击以重新启动命令并清除所有参数
Python click to restart a command with all parameters cleared
我下面的脚本保存在'bike.py'中并注册为bike
shell命令。我想要 运行 一个简单的 bike filter -c chicago -m 1 -d 1
命令来探索 chicago
作为城市、1
作为月份和 1
作为星期几的数据。我使用 prompt=True
来捕获命令中未指定的任何选项。
我还希望能够在最后重新启动命令并清除所有现有参数,这样命令会提示我输入 city
、month
和 day of week
在重启时。但是,代码无法做到这一点。它只是 运行 脚本中的内容并给我错误,因为脚本不能 运行 没有传入的参数。
我应该如何使用点击来执行此操作?
@click.group()
@click.pass_context
def main():
ctx.ensure_object(dict)
@main.command()
@click.option('-city', '-c', prompt=True)
@click.option('-month', '-m', prompt=True)
@click.option('-day_of_week', '-d', prompt=True)
@click.pass_context
def filter(ctx, city, month, day_of_week):
# load filtered data
...
# restart the program
if click.confirm('Restart to explore another dataset?') if not False:
import sys
sys.argv.clear()
ctx.invoke(filter)
您可以更改过滤器命令,以便手动进行提示。我不认为 Click 会知道以其他方式提示,因为这不是常见的用例并且不符合 no-magic
点击样式指南。
@main.command()
@click.option('-city', '-c')
@click.option('-month', '-m')
@click.option('-day_of_week', '-d')
@click.pass_context
def filter(ctx, city, month, day_of_week):
# prompt if not passed in
if city is None:
city = click.prompt('City: ')
if month is None:
month = click.prompt('Month: ')
if day_of_week is None:
day_of_week = click.prompt('Day of the week: ')
# load filtered data
...
# restart the program
if click.confirm('Restart to explore another dataset?'):
ctx.invoke(filter)
或者,如果您真的想依赖内置功能,您可以通过覆盖 Option
class 和提示功能来获得一些好处。
我下面的脚本保存在'bike.py'中并注册为bike
shell命令。我想要 运行 一个简单的 bike filter -c chicago -m 1 -d 1
命令来探索 chicago
作为城市、1
作为月份和 1
作为星期几的数据。我使用 prompt=True
来捕获命令中未指定的任何选项。
我还希望能够在最后重新启动命令并清除所有现有参数,这样命令会提示我输入 city
、month
和 day of week
在重启时。但是,代码无法做到这一点。它只是 运行 脚本中的内容并给我错误,因为脚本不能 运行 没有传入的参数。
我应该如何使用点击来执行此操作?
@click.group()
@click.pass_context
def main():
ctx.ensure_object(dict)
@main.command()
@click.option('-city', '-c', prompt=True)
@click.option('-month', '-m', prompt=True)
@click.option('-day_of_week', '-d', prompt=True)
@click.pass_context
def filter(ctx, city, month, day_of_week):
# load filtered data
...
# restart the program
if click.confirm('Restart to explore another dataset?') if not False:
import sys
sys.argv.clear()
ctx.invoke(filter)
您可以更改过滤器命令,以便手动进行提示。我不认为 Click 会知道以其他方式提示,因为这不是常见的用例并且不符合 no-magic
点击样式指南。
@main.command()
@click.option('-city', '-c')
@click.option('-month', '-m')
@click.option('-day_of_week', '-d')
@click.pass_context
def filter(ctx, city, month, day_of_week):
# prompt if not passed in
if city is None:
city = click.prompt('City: ')
if month is None:
month = click.prompt('Month: ')
if day_of_week is None:
day_of_week = click.prompt('Day of the week: ')
# load filtered data
...
# restart the program
if click.confirm('Restart to explore another dataset?'):
ctx.invoke(filter)
或者,如果您真的想依赖内置功能,您可以通过覆盖 Option
class 和提示功能来获得一些好处。