如何在Click上下文中制作持久变量?

时间:2019-05-11 13:48:00

标签: python python-3.x click

我有以下代码:

import click


class FinStory:
    def __init__(self):
        self.expenditure_stack = []
        self.income_stack = []


pass_finstory = click.make_pass_decorator(FinStory, ensure=True)


@click.group()
@click.pass_context
def finprompt(finstory):
    """
    A CLI-based budgeting manager.
    """
    finstory = FinStory()
    pass


@finprompt.command()
@click.argument("amount")
@pass_finstory
def spend(finstory, amount):
    """Adds an expenditure to the stack"""
    click.echo(f"{amount} added!")
    finstory.expenditure_stack.append(amount)
    print(finstory.expenditure_stack)


@finprompt.command()
@pass_finstory
def status(finstory):
    """This script gets the current stack"""
    print(finstory.expenditure_stack)
    print(finstory.income_stack)


"""
# setup.py
from setuptools import setup

setup(
    name="FinancialHistory",
    version="1.0",
    py_modules=["finprompt"],
    install_requires=["Click"],
    entry_points="""
        [console_scripts]
        fin=finprompt:finprompt
    """,
)

-------
Run the following commands after installing:
>> fin spend 20
['20'] 
>> fin status
[]
[]
"""

我目前正在做一个基于CLI的预算管理器,我的目标是拥有一个类似git的界面。 我正在使用Python 3.7中的Click

例如,一个人可能一顿饭花了20美元,因此可以使用fin spend 20将该支出记录到堆栈中,然后以一种类似git的方式,我希望使用fin status进行报告堆栈中的当前支出。 希望是然后使用fin commit将支出推送到某种数据库中。

但是,我无法在顺序调用中保存变量,例如: fin spend 20会将20保存到expenditure_stack列表中,但是稍后fin status尝试打印出堆栈中的对象时,它们为空!

enter image description here

如何确保在一个命令中修改了列表(花费)之后,更改将保留到下一个命令(状态)?

0 个答案:

没有答案