今天我们用 OpenCode 来做一个命令行二维码生成器。输入任意文字或链接,输出一张 PNG 格式的二维码图片。
最终效果:在终端输入 python qr.py "https://opencode.ai" -o opencode.png,就能在当前目录生成一张二维码图片。
我对 OpenCode 说:
> 帮我创建一个 Python 命令行二维码生成器,先搭好项目骨架:读取命令行参数中的文本内容,调用 qrcode 库生成二维码,保存为 PNG 文件。使用 argparse 处理参数,支持 --output、--size、--error 三个可选参数。
OpenCode 立刻分析了需求,创建了 qr.py 文件:
import argparse
import qrcode
def main():
parser = argparse.ArgumentParser(description="命令行二维码生成器")
parser.add_argument("text", help="要编码的文本或链接")
parser.add_argument("-o", "--output", default="qrcode.png", help="输出文件名")
parser.add_argument("-s", "--size", type=int, default=10, help="二维码格子大小")
parser.add_argument("-e", "--error", choices=["L", "M", "Q", "H"], default="M", help="容错级别")
args = parser.parse_args()
qr = qrcode.QRCode(
version=None,
error_correction=getattr(qrcode.constants, f"ERROR_CORRECT_{args.error}"),
box_size=args.size,
border=2,
)
qr.add_data(args.text)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save(args.output)
print(f"二维码已保存到 {args.output}")
if __name__ == "__main__":
main()
要点:OpenCode 自动处理了 argparse 的参数验证(choices 限定容错级别),以及 getattr 动态获取 qrcode 常量,这些都是标准库的最佳实践。
我对 OpenCode 说:
> 生成 requirements.txt 文件,并给代码加上输入校验——文本不能为空,输出路径要确保目录存在。
OpenCode 先生成了 requirements.txt:
qrcode>=7.4 Pillow>=10.0
然后修改了 qr.py,在 main() 函数开头加入了校验逻辑:
import argparse
import os
import qrcode
import sys
def validate_input(text: str) -> str:
text = text.strip()
if not text:
print("错误:输入内容不能为空", file=sys.stderr)
sys.exit(1)
return text
def ensure_output_dir(filepath: str) -> None:
dirname = os.path.dirname(filepath)
if dirname and not os.path.exists(dirname):
os.makedirs(dirname, exist_ok=True)
要点:OpenCode 不仅加了校验,还提取了 validate_input 和 ensure_output_dir 两个独立函数,体现了良好的代码组织习惯。os.makedirs(exist_ok=True) 也避免了目录已存在时的报错。
我对 OpenCode 说:
> 加一个 --preview 参数,生成二维码后在终端用 ASCII 字符打印预览,这样不需要打开图片就能确认内容是否正确。
OpenCode 利用 qrcode 库内置的终端输出能力,加上了预览功能:
import argparse
import os
import qrcode
import sys
def validate_input(text: str) -> str:
text = text.strip()
if not text:
print("错误:输入内容不能为空", file=sys.stderr)
sys.exit(1)
return text
def ensure_output_dir(filepath: str) -> None:
dirname = os.path.dirname(filepath)
if dirname and not os.path.exists(dirname):
os.makedirs(dirname, exist_ok=True)
def preview_qr(qr: qrcode.QRCode) -> None:
qr.print_ascii(out=sys.stdout)
def main():
parser = argparse.ArgumentParser(description="命令行二维码生成器")
parser.add_argument("text", help="要编码的文本或链接")
parser.add_argument("-o", "--output", default="qrcode.png", help="输出文件名(默认 qrcode.png)")
parser.add_argument("-s", "--size", type=int, default=10, help="格子大小(默认 10)")
parser.add_argument(
"-e", "--error",
choices=["L", "M", "Q", "H"],
default="M",
help="容错级别 L/M/Q/H(默认 M)"
)
parser.add_argument("-p", "--preview", action="store_true", help="在终端打印 ASCII 预览")
parser.add_argument("-c", "--color", default="#000000", help="二维码颜色(默认黑色)")
args = parser.parse_args()
text = validate_input(args.text)
qr = qrcode.QRCode(
version=None,
error_correction=getattr(qrcode.constants, f"ERROR_CORRECT_{args.error}"),
box_size=args.size,
border=2,
)
qr.add_data(text)
qr.make(fit=True)
if args.preview:
print(f"\n预览:{text}\n")
preview_qr(qr)
print()
img = qr.make_image(fill_color=args.color, back_color="white")
ensure_output_dir(args.output)
img.save(args.output)
print(f"✓ 二维码已保存到 {args.output}")
if args.preview:
img.show()
if __name__ == "__main__":
main()
要点:OpenCode 还额外加上了 --color 参数和 img.show() 调用(在预览模式下弹出系统图片查看器),超出预期。这就是 AI 编程的优势——它会补充你可能没想到但合理的设计细节。
我对 OpenCode 说:
> 帮我安装依赖并测试生成一个二维码。
OpenCode 执行了 pip install -r requirements.txt,然后跑了测试命令:
python qr.py "https://www.linweiqin.com" -o blog.png -p
终端打印出了 ASCII 二维码预览,同时生成了清晰的 PNG 图片。一次通过,无需调试。
最终 qr.py 共约 90 行,完整代码如下:
import argparse
import os
import qrcode
import sys
def validate_input(text: str) -> str:
text = text.strip()
if not text:
print("错误:输入内容不能为空", file=sys.stderr)
sys.exit(1)
return text
def ensure_output_dir(filepath: str) -> None:
dirname = os.path.dirname(filepath)
if dirname and not os.path.exists(dirname):
os.makedirs(dirname, exist_ok=True)
def preview_qr(qr: qrcode.QRCode) -> None:
qr.print_ascii(out=sys.stdout)
def main():
parser = argparse.ArgumentParser(description="命令行二维码生成器")
parser.add_argument("text", help="要编码的文本或链接")
parser.add_argument("-o", "--output", default="qrcode.png", help="输出文件名(默认 qrcode.png)")
parser.add_argument("-s", "--size", type=int, default=10, help="格子大小(默认 10)")
parser.add_argument(
"-e", "--error",
choices=["L", "M", "Q", "H"],
default="M",
help="容错级别 L/M/Q/H(默认 M)"
)
parser.add_argument("-p", "--preview", action="store_true", help="在终端打印 ASCII 预览")
parser.add_argument("-c", "--color", default="#000000", help="二维码颜色(默认黑色)")
args = parser.parse_args()
text = validate_input(args.text)
qr = qrcode.QRCode(
version=None,
error_correction=getattr(qrcode.constants, f"ERROR_CORRECT_{args.error}"),
box_size=args.size,
border=2,
)
qr.add_data(text)
qr.make(fit=True)
if args.preview:
print(f"\n预览:{text}\n")
preview_qr(qr)
print()
img = qr.make_image(fill_color=args.color, back_color="white")
ensure_output_dir(args.output)
img.save(args.output)
print(f"✓ 二维码已保存到 {args.output}")
if args.preview:
img.show()
if __name__ == "__main__":
main()
整个过程不到 3 分钟,我做了 4 件事:描述需求 → 补充校验 → 加预览 → 运行验证。全程没有写一行代码,也没有查 qrcode 文档——OpenCode 替我完成了从导包、参数解析、错误处理到文件保存的全部实现。
相比传统开发流程(查文档→写代码→调试→修 bug),OpenCode 把"想法到成品"的路径压缩到了零。尤其是它主动加上的 --color 和 img.show(),这种"懂你所想"的细节补充,才是 AI 编程助手真正拉开效率差距的地方。
如果你还没试过用自然语言写代码,不妨从这个小项目开始:打开终端,对 OpenCode 说出你的需求,看看它能在几分钟内帮你做出什么。