1

我正在使用非常好的 Click 框架来构建一个 Python CLI,它充当一组复杂 REST API 的“包装器”。我使用了“复杂”示例,以便拥有良好的样板代码来构建 CLI 的其余部分。

但是,由于 CLI 本身与 REST API 通信,因此我需要为每个命令进行一些配置。示例:用户身份验证(ID、密码等),如果与默认设置不同,则为 API 服务器的 URL。

我可以强制用户将这些配置作为每个命令的参数,但这在执行许多命令时真的很烦人(用户必须为每个命令插入他的身份验证详细信息)。

有没有办法让用户在第一个命令中输入他的凭据,以便让他的 uid/pwd 在整个会话中持续存在(例如 mysql-cli),并且在执行他需要的命令后,“注销“来自 CLI?

4

1 回答 1

1

通常这样做的方法是使用一个configure命令将这些凭据存储在一个文件中(通常在用户的$HOME文件夹中,如果您在 Linux 上)并更改其权限,使其只能由用户读取。

您可以使用configparser(或JSON或 YAML 或任何您想要的)基于配置文件加载不同的凭据集:

# $HOME/.your-config-name
[default]
auth-mode=password
username=bsmith
password=abc123

[system1]
auth-mode=oauth
auth-token=abc-123
auth-url=http://system.1/authenticate

[system2]
auth-mode=anonymous
auth-url=http://this-is.system2/start

然后,您可以使用全局参数(例如--profile)来选择应将哪些凭据用于给定请求:

$ your-cli --profile system1 command --for first-system
于 2015-04-14T19:32:53.110 回答