从c角度看,system只是返回执行的结果,0代表成功,非0代表失败。输出到stdout和stderr的是无法输出的,除非重定向到文件。但是popen则可以把重定向输入、输出和错误。你可以把popen打开的当作文件一样读取。所以你用osexecute是无法得到标准输出的,除非重定向到文件中。好像lua目前不支持popen,除非你自己写扩展,或者用ffi
一:
new lua()DoFile("myLualua"); //执行lua脚本 /myLualua:要 执行的lua的脚本名字
new lua()DoString("num = 2"); //读取脚本
注意:脚本文件必须和工程目录所在是同一个路径不然会找不到lua的 脚本
对lua脚本的位置放置:
1)直接将lua文件,放在工程目录下面的Debug文件夹下
2)将lua脚本的属性中 "复制到输出目录" 选择“始终复制”
--1导入luanet程序集,该程序集负责 lua call C#
require “luanet”
--2加载程序集(命名空间)
uanetload_assembly(“System”) // 加载程序集(我们说过程序集其实就是exe或者dll文件)
--3获取类别(获取类名)
Test = luanetimport_type(“SystemTest”) //引入类(Test就是类名)
--4调用构造函数初始化C#脚本的类对象
--调用无参数的构造函数
-- test = Test()
--调用有参数的构造函数 ----int
-- test = Test(10)
--调用有参数的构造函数 ----string
-- test = Test("10")
-- lua调用C#构造函数规则---> 自动匹配最近的那个
-- -对于某些情况并不适用,比如说C#函数中有两个一个参数的构造函数重载时即会发生匹配错误的情况
--- 这种情况我们需要手动指定调用哪个构造函数
test_argInt = luanetget_constructor_bysig(Test,"SystemString")
t = test_argInt(3)
-- 5调用C#属性
print(tLanguageNume)
-- 调用Test类中的TestPrint()方法,使用的是":"
t:TestPrint(10);
-- 调用Test类中的静态方法,使用的是""
TestTestStatciPrint(9)
--调用带有ref参数的方法
t:RefMethod(8)
--调用带有out参数的方法(带有out的参数可以不写,即不传参数)
-- var,var2 = t:OutMethod("hello")
-- print(var2)
-- v1,v2,v3,v4 = t:OutMethod(10)
tb = t:OutMethod(10)
print(type(tb))
保存到本地的Lua代码需要经过以下步骤:
1 导入相关库文件
首先需要导入相关库文件,包括cocos2d-x库和io库。这可以通过在代码开头添加以下代码实现:
local FileUtils = ccFileUtils:getInstance()
local io = require("io")
2 获取数据
接下来需要获取需要保存的的数据。这可以通过使用cocos2d-x中的Sprite类来实现:
local sprite = ccSprite:create("imagepng")
local texture2D = sprite:getTexture()
local size = texture2D:getContentSizeInPixels()
local data = texture2D:getData()
3 将数据写入文件
最后一步是将获取到的数据写入文件。这可以通过使用io库中的文件 *** 作函数来实现:
local path = FileUtils:getWritablePath() "imagepng"
local file = ioopen(path, "wb")
file:write(data, size)
file:close()
这段代码会将获取到的数据写入一个名为imagepng的文件中,保存在应用的可写目录下。需要注意的是,在写入文件之前需要先创建一个io文件对象,并且在写入完成之后需要关闭文件对象。
以上就是将保存到本地的Lua代码的详细步骤。
1,在百度中搜索“lua51dll”,然后找到相关资源并下载。
2,下载好资源后,找到刚下载的“lua51dll”,点击选中,并按下键盘上的“ctrl+c”键进行复制。
3,打开计算机窗口,进入“C:\Windows\System32”路径。并按下键盘上的“ctrl+v”,将lua51dll复制到该文件夹。
4,同时按下键盘上的win+r键,打开运行窗口。输入“regsvr32 Lua51dll”,然后按下回车。
5,按下回车后,会提示安装完成。此时问题就解决了。
FreeSWITCH中的lua *** 作小结
lua中设置当前通道变量:
方法一:
session:setVariable("fullName", "xxxxx");--需判断session是否为空
方法二:
local uuid =getUUID(callerid);
local res=api:executeString("uuid_setvar " uuid " fullName ""xxxxxxx")
该处设置的变量可以是通道中本没有的变量,设置完了后,在其他地方就可以引用该变量。
lua中设置全局通道变量(在varsxml中设置)
local ucall_ip = api:executeString("global_setvar qt_ucall_ip_port 192168032:9090");
获取当前的通道变量
local callee_num=session:getVariable("qt_ucall_callee");
获取全局通道变量
local ucall_ip = api:executeString("global_getvar qt_ucall_ip_port");
获取当前会话uuid
session:get_uuid()
获取当前路径
--USwitch的当前安装目录
syspath = tostring(api:execute("global_getvar", "base_dir"));
使用uuid_transfer将当前对话的两个号码同时转入会议中
local trf1="uuid_transfer " guestuuid " -both " conferenceNum;
OutputConsoleLog("info" , scriptname ": try to get guestNum to conference,command is{"trf1"}");
api:executeString(trf1);
外呼方法总结:
originate user/11103139316095XX
originate sofia/external/139316095XX@192168234 &playback(calloutmusic/welcometoyoump3)
originate loopback/139316095XX&playback(calloutmusic/20110126164156mp3)
在lua脚本中放一段录音
session:streamFile("notondutywav");
判断会话是否已建立
session:ready()==true
挂断当前会话
session:hangup();
将当前会话休眠一段时间
session:sleep(5000);
发起>
以上就是关于在Lua中怎么得到os.execute全部的内容,包括:在Lua中怎么得到os.execute、C#中执行Lua脚本、保存图片到本地lua代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)