我有以下代码:
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
尝试打印出堆栈中的对象时,它们为空!
如何确保在一个命令中修改了列表(花费)之后,更改将保留到下一个命令(状态)?