如何在Python Click CLI工具中实现JSON Payload的多行输入?
实现Click CLI的多行JSON payload输入
嘿,这个需求我刚好在开发CLI工具时遇到过!Click自带的click.prompt()默认是单行输入,但要实现多行JSON payload的输入,有几种实用的方案,我给你详细说说:
方案1:直接读取标准输入(简单直接)
这种方式适合快速接收多行输入,用户输入完后按Ctrl+D(Windows系统按Ctrl+Z)结束输入。代码示例:
import click import sys import json @click.command() def get_payload(): click.echo("请输入你的JSON payload(输入完成后按 Ctrl+D / Ctrl+Z 结束):") # 读取所有输入内容 payload_content = sys.stdin.read().strip() # 可选:添加JSON格式校验 try: parsed_payload = json.loads(payload_content) click.secho("✅ 输入的JSON格式有效!", fg="green") except json.JSONDecodeError as e: click.secho(f"❌ JSON格式错误:{str(e)}", fg="red") return click.echo("\n你输入的payload内容:") click.echo(payload_content) if __name__ == "__main__": get_payload()
方案2:使用click.edit()(更友好的编辑器体验)
如果用户需要输入结构复杂的JSON,推荐用这个方法——它会调用系统默认的文本编辑器(比如Vim、Nano或Windows记事本),让用户在编辑器里从容编写多行JSON,体验更好。代码示例:
import click import json @click.command() def edit_payload(): # 可以传入初始模板,引导用户填写 default_template = """{ "name": "", "description": "", "data": {} }""" # 打开编辑器获取输入 payload_content = click.edit(default_template) if not payload_content: click.echo("⚠️ 你取消了输入操作") return payload_content = payload_content.strip() # JSON格式校验 try: parsed_payload = json.loads(payload_content) click.secho("✅ JSON格式验证通过!", fg="green") except json.JSONDecodeError as e: click.secho(f"❌ JSON格式错误:{str(e)}", fg="red") return click.echo("\n最终的payload内容:") click.echo(payload_content) if __name__ == "__main__": edit_payload()
关于click.prompt()的补充
如果一定要用click.prompt(),它本身默认只读取一行输入,没法直接支持多行。不过你可以通过提示语引导用户,但体验不如上面两种方案,比如:
import click @click.command() def prompt_workaround(): click.echo("注意:此方式仅支持单行输入,复杂JSON推荐用上面的方案") payload = click.prompt("请输入JSON payload", type=click.STRING) click.echo(f"你输入的内容:{payload}") if __name__ == "__main__": prompt_workaround()
总结一下,如果是简单的多行输入,用方案1足够;如果是复杂JSON,方案2的编辑器体验会更贴心。
内容的提问来源于stack exchange,提问作者Jerome VDL
相关产品推荐
相关产品推荐

