是否可以将命令行的输出管道输出到lua?

时间:2014-11-27 19:34:59

标签: io lua command-line-arguments

在我的lua函数中,我可以使用:

arg='wlp1s0',

然后东西工作!

我想将参数更改为

的输出
exec ip route get 8.8.8.8 | awk 'NR==1 {print $5}'

如何让它工作,以便将arg设置为返回上述命令的字符串?

好的,这是完整的功能:

settings_table = {
{
    name='fs_used_perc',
    arg='/',
    max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0xBA1B19,
    fg_alpha=0.8,
    x=180, y=25,
    radius=30,
    thickness=7,
    start_angle=140,
    end_angle=320
},


{
    name='battery_percent',
    arg='',
    max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0x3399FF,
    fg_alpha=0.8,
    x=170, y=32,
    radius=40,
    thickness=7,
    start_angle=130,
    end_angle=320
},
{
    name='memperc',
    arg='',
    max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0x24CE09,
    fg_alpha=0.8,
    x=160, y=42,
    radius=50,
    thickness=7,
    start_angle=130,
    end_angle=320
},
{
    name='cpu',
    arg='cpu0',
    max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0xCECE09,
    fg_alpha=0.8,
    x=150, y=52,
    radius=60,
    thickness=7,
    start_angle=124,
    end_angle=320
},
    {
    name='upspeedf',
    arg='wlp1s0',
max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0xCE4209,
    fg_alpha=0.8,
    x=143, y=60,
    radius=70,
    thickness=7,
    start_angle=124,
    end_angle=320
},
    {
    name='downspeedf',
arg='wlp1s0',
    max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0x6209CE,
    fg_alpha=0.8,
    x=135, y=67,
    radius=80,
    thickness=7,
    start_angle=125,
    end_angle=320
},
}
-- Use these settings to define the origin and extent of your clock.
clock_r=65
-- "clock_x" and "clock_y" are the coordinates of the centre of the clock, in pixels, from the top left of the Conky window.

clock_x=100
clock_y=150

show_seconds=true

require 'cairo'

function rgb_to_r_g_b(colour,alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
 end

 function draw_ring(cr,t,pt)
 local w,h=conky_window.width,conky_window.height

 local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
 local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']

 local angle_0=sa*(2*math.pi/360)-math.pi/2
 local angle_f=ea*(2*math.pi/360)-math.pi/2
 local t_arc=t*(angle_f-angle_0)

 -- Draw background ring

 cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
 cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
 cairo_set_line_width(cr,ring_w)
 cairo_stroke(cr)

 -- Draw indicator ring

 cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
 cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
 cairo_stroke(cr)        
 end

function conky_clock_rings()
local function setup_rings(cr,pt)
    local str=''
    local value=0

    str=string.format('${%s %s}',pt['name'],pt['arg'])
    str=conky_parse(str)

    value=tonumber(str)
    pct=value/pt['max']

    draw_ring(cr,pct,pt)
end

-- Check that Conky has been running for at least 5s

if conky_window==nil then return end
local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)

local cr=cairo_create(cs)    

local updates=conky_parse('${updates}')
update_num=tonumber(updates)

if update_num>5 then
    for i in pairs(settings_table) do
        setup_rings(cr,settings_table[i])
    end
end    

在name ='upspeedf'的条目中,有一个arg ='wlp1s0'。还有'downppedf'。

我想通过命令行的输出自动选择它,这为我提供了界面gateaay。

exec ip route get 8.8.8.8 | awk 'NR==1 {print $5}'

在函数conky_clock_rings()中调用该函数。我想这也应该被修改。这澄清了我的问题吗?

再次感谢您的所有时间和精力!

1 个答案:

答案 0 :(得分:0)

您必须使用io库。如果你想运行你的命令并将它传递给Lua,就像这样:

exec ip route get 8.8.8.8 | awk 'NR==1 {print $5}' | lua program.lua

使用类似的东西:

local input = io.read("*all")

如果你想从Lua内部调用你的管道,你可以这样做:

local input = io.popen("exec ip route get 8.8.8.8 | awk 'NR==1 {print $5}'"):read("*all")

编辑:

阅读完解释后,可以采用以下方法:

local network_interface = io.popen("exec ip route get 8.8.8.8 | awk 'NR==1 {print $5}'"):read("*l")
settings_table = {
   ...,
   {
      name='upspeedf',
      arg=network_interface,
      ...
   },
   ...
}