在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
执行一系列的参数 类型说明符也可以 是' ('MIN '..' MAX)' 的形式。 local lapp = require 'pl.lapp' local args = lapp [[ Setting ranges <x> (1..10) A number from 1 to 10 <y> (-5..1e6) Bigger range ]]
print(args.x,args.y)
下面的意思是大与或等于 MIN 和小于或等于MAX ;没有规定强制参数必须是整数。 类型说明符也可以是定义自定义类型,如: lapp = require ('pl.lapp')
lapp.add_type('integer','number', function(x) lapp.assert(math.ceil(x) == x, 'not an integer!') end )
local args = lapp [[ <ival> (integer) Process PID ]]
print(args.ival)
lapp.add_type需要三个参数,类型名称、 转换器和约束函数。约束函数有一个断言,如果某些条件不成立;我们使用 lapp.assert,因为条件不服合命令行脚本的标准(译注:即不符合条件就终止)。转换器参数可以是已知的 Lapp 或一个函数,可以从字符串生成一个值。 ' varargs' 参数组 lapp = require 'pl.lapp' local args = lapp [[ Summing numbers <numbers...> (number) A list of numbers to be summed ]]
local sum = 0 for i,x in ipairs(args.numbers) do sum = sum + x end print ('sum is '..sum)
尾随参数的'...'指示此参数是一个 'varargs' 参数。它必须是最后一个参数,并且 args.number 将是一个数组。 考虑下面 Mac OS x中的头实用程序实现: -- implements a BSD-style head -- (see http://www.manpagez.com/man/1/head/osx-10.3.php)
lapp = require ('pl.lapp')
local args = lapp [[ Print the first few lines of specified files -n (default 10) Number of lines to print <files...> (default stdin) Files to print ]]
-- by default, lapp converts file arguments to an actual Lua file object. -- But the actual filename is always available as <file>_name. -- In this case, 'files' is a varargs array, so that 'files_name' is -- also an array. local nline = args.n local nfile = #args.files for i = 1,nfile do local file = args.files[i] if nfile > 1 then print('==> '..args.files_name[i]..' <==') end local n = 0 for line in file:lines() do print(line) n = n + 1 if n == nline then break end end end
因为自动生成字段files_name ,也是一个数组,我们要注意如何访问所有的文件名。 (这个脚本可能不很周到,因为 Lapp 将打开所有提供的文件,并仅在脚本结束时关闭它们。请参见另一个xhead.lua示例)。 标志和选项可能也被宣布为 vararg 数组,并可以发生在任何地方。记住,短的选项可以组合(如 tar -xzf),所以'-vvv'是完全合法 。但通常的 args.v 值只是一个简单true值。 local args = require ('pl.lapp') [[ -v... Verbosity level; can be -v, -vv or -vvv ]] vlevel = not args.v[1] and 0 or #args.v print(vlevel)
vlevel 赋值有点 Lua 特色,所以考虑案件: * No -v flag, v is just { false } * One -v flags, v is { true } * Two -v flags, v is { true, true } * Three -v flags, v is { true, true, true }
定义参数的回调 如果一个脚本实现了lapp.callback,然后 Lapp 将在每个参数解析后调用它。回调被传递参数名称、 未分析的原始值和结果表。它会在赋值后立即调用,所以相应的字段是可用的。 lapp = require ('pl.lapp')
function lapp.callback(parm,arg,args) print('+',parm,arg) end
local args = lapp [[ Testing parameter handling -p Plain flag (defaults to false) -q,--quiet Plain flag with GNU-style optional long name -o (string) Required string option -n (number) Required number option -s (default 1.0) Option that takes a number, but will default <start> (number) Required number argument <input> (default stdin) A parameter which is an input file <output> (default stdout) One that is an output file ]] print 'args' for k,v in pairs(args) do print(k,v) end
这将生成以下输出: $ args -o name -n 2 10 args.lua + o name + n 2 + start 10 + input args.lua args p false s 1 input_name args.lua quiet false output file (781C1B98) start 10 input file (781C1BD8) o name n 2
当你解析参数完毕后,回调函数可以用来立即处理。
宽松模式 如果您想要使用多字母 '短' 参数,则需要将lapp.slack变量设置为true. 在下面的示例中我们也看到如何使用默认false和默认true标志,以及如何覆盖默认-h帮助标志 (—help仍然正常工作) — — 这适用于非宽松模式下。 -- Parsing the command line ---------------------------------------------------- -- test.lua local lapp = require 'pl.lapp' local pretty = require 'pl.pretty' lapp.slack = true local args = lapp [[ Does some calculations -v, --video (string) Specify input video -w, --width (default 256) Width of the video -h, --height (default 144) Height of the video -t, --time (default 10) Seconds of video to process -sk,--seek (default 0) Seek number of seconds -f1,--flag1 A false flag -f2,--flag2 A false flag -f3,--flag3 (default true) A true flag -f4,--flag4 (default true) A true flag ]]
pretty.dump(args)
在这里我们可以看到test.lua的输出: $> lua test.lua -v abc --time 40 -h 20 -sk 15 --flag1 -f3 ----> { width = 256, flag1 = true, flag3 = false, seek = 15, flag2 = false, video = abc, time = 40, height = 20, flag4 = true
|
请发表评论