在Windows中使用lua os.execute启动程序而无需CMD的闪烁。
2011-6-15 18:58:49
收藏:0
阅读:294
评论:3
我正在使用 Lua 从 Windows 系统中愉快地启动一个程序:
strProgram = '"C:\\Program Files\\Ps Pad\\PSPad.exe"'
strCmd = 'start "" '..strProgram
os.execute(strCmd)
这个命令可以正确地启动程序并完成脚本。不过它会在瞬间闪现一个命令窗口,有没有人知道如何用 Lua 启动程序而不显示命令窗口呢?
原文链接 https://stackoverflow.com/questions/6362841
点赞
stackoverflow用户140367
这是一种只使用 Lua 标准 API(即无额外库)而不需要控制台窗口来运行命令的方法。在 Win7 x64 上进行了测试。
function exec_silent(command)
local p = assert(io.popen(command))
local result = p:read("*all")
p:close()
return result
end
编辑:请参见下面的评论,它可能不适用于所有人。我不确定为什么。
2015-04-15 12:57:32
stackoverflow用户6941109
这是我使用的从Lua调用批处理的代码片段,可能会有帮助。
在win控制台(命令提示符)中打开并执行,在unix(mac|nix)中相同。
-- sBatchFile = .bat for windows, .sh for x
function vfFork2(sBatchFile)
local b = package.cpath:match("%p[\\|/]?%p(%a+)")
if b == "dll" then
-- windows
os.execute('start cmd /k call "'..sBatchFile..'"')
elseif b == "dylib" then
-- macos
os.execute('chmod +x "'..sBatchFile..'"')
os.execute('open -a Terminal.app "'..sBatchFile..'"')
elseif b == "so" then
-- Linux
os.execute('chmod +x "'..sBatchFile..'"')
os.execute('xterm -hold -e "'..sBatchFile..'" & ')
end
end
2016-10-08 11:04:31
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
Lua 的 os.execute 命令基于 C 标准库的 "shell" 函数。在 Windows 中,此函数将始终创建一个命令窗口,并且它会一直阻塞您的当前进程,直到窗口完成。后者在 Linux 中也会发生。
最终没有办法规避此问题。不通过 Lua 标准 API。因为 Lua 需要轻量级和平台无关,API 不允许使用 OS 依赖的本机 API。
您最好使用Lua Ex-Api模块。它事实上是已被抛弃的软件,并且您可能需要修补一些编译器问题(我猜想 Windows 端口不是他们的首要任务)。但它是一个相当不错的生成进程的方式。您可以选择自己等待它完成,或让它们并行运行。而且它不会弹出一个命令提示窗口,除非应用程序本身使用一个。