You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 14:22:44