繁体   English   中英

如何从LUAJ执行Linux终端命令?

[英]How to execute a linux terminal command from LUAJ?

我只想简单地执行一个linux terminal command例如来自LuaJ ls ,结果将返回或返回任何返回的结果,我希望接收它并在Java Gui显示名称。 我搜索了但找到了,LuaJ没有找到。

有什么功能可以执行LuaJ的终端命令吗?

有多种方法可以执行此操作,其中一种方法是,您可以用Java自己实现它,然后将其链接到LuaJ。

LuaFunction command = new OneArgFunction()
{
    public LuaValue call(LuaValue cmd)
    {
        Process p = Runtime.getRuntime().exec("/bin/sh", "-c", cmd.checkstring());
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        int returnCode = p.waitFor();
        return LuaValue.valueOf(returnCode);
    }
}
globals.set("command", command);

然后在Lua中:

local code = command("ls");

实际获取命令输出的问题在于,您不能仅仅拥有一个固定解决方案。 众所周知,您可能正在调用一个程序,该程序运行2个小时会产生恒定的输出,这可能是个问题,更不用说该程序是否需要输入了。 如果您只打算使用某些功能,则可以制作上述功能的肮脏版本,以捕获流中的输出并返回所有输出而不是退出代码,只是不要在没有此功能的其他进程上使用它不能很快回来。 另一种选择是创建一个类,该类包装来自流程的输入和输出流,并返回该类的强制版本,并管理lua的输入和输出。

Lua确实具有OsLib的一部分函数execute(),如果当前环境中不存在execute,则在Java调用中:

globals.load(new OsLib());

在加载lua代码之前。 os.execute()函数返回状态代码,并且不返回流,因此无法在那里获得输出。 为了解决这个问题,您可以修改命令以将输出通过管道传递到临时文件,并使用io库(如果当前环境中不存在新的IoLib())将其打开。

另一个选项是使用io.openProcess,它还执行命令并返回一个文件以读取输出。

资源:

http://luaj.org/luaj/3.0/api/org/luaj/vm2/lib/OsLib.html

http://luaj.org/luaj/3.0/api/org/luaj/vm2/lib/IoLib.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM