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

如何让Lua脚本支持管道输入、命令行参数及默认值三种输入方式?

Lua脚本实现三种互斥输入方式

需求是让test.lua支持三种互斥的输入方式:

  • 通过管道接收前置命令输出,示例:echo "value" | lua test.lua
  • 通过命令行参数传递输入,示例:lua test.lua "value"
  • 无输入时使用脚本内的默认值,示例:lua test.lua

目前已实现方式2和3的最小示例:

local params = { ... }
local val = params[1] or "default value"

要实现方式1,可通过io.read("*all")读取标准输入,但直接加入该代码后,无管道输入时脚本会一直等待输入。需要在Lua中检测标准输入是否为空,以此整合三种输入方式,参考C语言实现思路但未找到对应Lua方法。

最终解决方案

通过io.stdin:seek方法判断标准输入是否有内容,最终实现代码如下:

local params = { ... }
local val

-- 尝试定位到标准输入末尾,判断是否有管道输入
local pipe = io.stdin:seek('end')

if pipe then
  -- 重置指针到开头,读取所有内容
  io.stdin:seek('set')
  val = io.read("*a")
else
  -- 无管道输入时,优先用命令行参数,否则用默认值
  val = params[1] or "default"
end

print(val) -- 测试输出

逻辑说明:io.stdin:seek('end')在标准输入为管道(有内容)时会返回当前位置,而如果是终端交互式输入(无预输入)则会返回nil。利用这一特性区分是否有管道输入,优先处理管道内容,再处理命令行参数,最后使用默认值,实现三种输入方式的互斥。

内容的提问来源于stack exchange,提问作者Marcos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:17:10