首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从LUAJ执行linux终端命令?

如何从LUAJ执行linux终端命令?
EN

Stack Overflow用户
提问于 2016-04-05 07:07:08
回答 1查看 115关注 0票数 0

我只想从linux terminal command中执行一个像ls那样的LuaJ,它将返回的结果或任何返回的东西,我都想接收它,并在Java Gui中显示名称。我搜索了一下,但没有找到thisLuaJ

是否有从LuaJ ??执行终端命令的函数?

EN

回答 1

Stack Overflow用户

发布于 2016-08-23 05:16:49

有多种方法可以做到这一点,例如,您可以自己实现它,然后将它链接到LuaJ。

代码语言:javascript
复制
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);

然后在卢阿:

代码语言:javascript
复制
local code = command("ls");

实际获取命令输出的问题是,您不能只得到一个固定的解决方案。因为系统都知道,您可以调用一个运行了2个小时的程序,生成恒定的输出,这可能是一个问题,更不用说程序是否需要输入了。如果您知道只使用特定的函数,那么您可以对上面的函数做一个肮脏的版本来捕获流中的输出并返回所有输出,而不是退出代码,只是不要在其他不能快速返回的进程上使用它。另一种选择是创建一个类,该类封装来自流程的输入和输出流,并返回该类的强制版本,并管理来自lua的输入和输出。

Lua确实有一个称为OsLib ()的函数,如果当前环境中不存在execute,那么在Java中:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36419404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档