高效使用io.popen,或者寻找替代方案

我不确定是否有更有效的方法来完成这个任务,虽然有人曾经说过他们使用 Win32 API 而不是 io.popen。问题是,我好像缺乏将 WinAPI 纳入任何东西的技能,虽然如果我能找到一个详细的、分步骤的 makefile (或者我需要做的任何东西) 的指导,我很乐意使用它并使其正常工作。但在那之前,这就是手头的任务。

我目前使用 io.popen 在程序中返回 ping 结果。问题是,它会弹出 cmd 窗口,虽然只是短暂地出现,但仍然很烦人。这是我的代码:

pinghandle = io.popen("ping "..zs.params(2))
pingresult = pinghandle:read("*a")
pingmin = string.match(pingresult,"Minimum = (%d+ms)")
pingmax = string.match(pingresult, "Maximum = (%d+ms)")
pingavg = string.match(pingresult, "Average = (%d+ms)")
pinghandle:close()
if pingmin and pingmax and pingavg then
  send(zs.param(1),"@r{@x111Ping to @w"..zs.params(2).." @x111Min: @w"..pingmin.." @x111Avg: @w"..pingavg.." @x111Max: @w"..pingmax.."@r}@w")
else
  send(zs.param(1),"@x111Unsuccessful ping to@w",zs.params(2))
end

不注意 zs.param(#). 那是客户端特定的,与代码无关。我的问题是......是否有一种“隐形”的方法来实现相同的结果?如果没有,那么这段代码的效率是不是已经尽可能高了?

点赞
用户282536
用户282536

有各种外部库可以帮助你完成这项任务。

请查看 winapi, apr 或者 ex

2013-01-07 14:03:25