python - Python, CLI, Click: 传递我自己的 argv 列表
问题描述
有没有办法sys.argv
用我自己的列表替换由click提供支持的实用程序?这argparse
很容易,看起来像这样:
def _retrieve_args(argv: List[str]) -> Any:
parser = argparse.ArgumentParser(
...
args = parser.parse_args(argv)
...
return args
那么你可以做任何你想做的事:
ARGS = _retrieve_args(sys.argv[1:])
或者
ARGS = _retrieve_args(['-v', '--count', '4', '.'])
如果需要的话。
有可能click
吗?
我不知道在sys.argv
特征click
设置中插入的位置:
@click.command(context_settings=dict(help_option_names=["-h", "--help"]))
@click.option(
"-p", "--pretty", is_flag=True, help=click.style("Pretty output.", fg="green")
)
@click.option(
"-e",
"--file-type",
type=str,
default=None,
help="Accept only specified audio files.",
)
@click.option(
"-b",
"--album-num",
type=int,
default=None,
help="Prepend INTEGER to the destination root directory name.",
)
@click.argument("tgt_dir", type=click.Path(exists=True, resolve_path=True))
def main(*, version="", **kwargs):
"""
My utility.
"""
print(f'version: "{version}"')
for key, val in kwargs.items():
print(f"key: {key}, val: {val}")
升级版:
测试框架与我想要的非常接近:
from click.testing import CliRunner
def run(*, argv: List[str]):
runner = CliRunner()
result = runner.invoke(main, argv)
print(result.output)
我可以main
像这样或多或少地调用该函数而没有不必要的测试开销吗?特别是没有存储result.output
?
解决方案
推荐阅读
- excel - 是否可以对一系列数字求和并更改每个数字?
- java - Java 列表
该条件添加可选 - android - 错误:程序类型已存在:android.arch.lifecycle.ViewModelStore
- kerberos - 重复出现的问题 - 启用 Kerberos 后,UI 中的 Ambari 服务列表中缺少 Kerberos 服务
- c# - XNA C#:Player 类下列表中的 Projectile 对象,Enemy 类无法识别
- wix - WIX Installer Preserve config file On major upgrade early Scheduling
- audio - 在将 OGG 音频转换为 MP3 时,FFMPEG 在文件开头添加了额外的内容
- r - 如果任何行包含子字符串,则标记
- java - 在 Android 上使用 cache2k 时出现 java.lang.NoClassDefFoundError
- python-3.x - 如何将极坐标图划分为 12 个分区?