我很高兴地从Lua使用的Windows系统中启动一个程序
strProgram = '"C:\\Program Files\\Ps Pad\\PSPad.exe"' strCmd = 'start "" '..strProgram os.execute(strCmd)
这工作正常,启动程序和脚本完成。 如何在一个命令窗口闪烁几分之一秒,是否有任何人从Lua的方式来启动一个程序。
Lua的os.execute命令是基于C标准库的“shell”功能。 在Windows中,此函数将始终创建一个命令窗口,并且在窗口结束之前,它总是会暂停当前进程。 后者也发生在Linux中。
最终没有办法解决这个问题。 不通过Lua标准API。 由于Lua需要轻量级且独立于平台,因此API不允许使用与操作系统相关的本机API。
你最好的选择是使用Lua Ex-Api模块。 这实际上是放弃了,你可能需要修补一些编译器问题(我猜Windows端口不是他们的首要任务)。 但是这是产生进程的合理的好方法。 你可以选择等到自己完成,或者让它们平行运行。 它不会抛出一个命令提示窗口,除非应用程序本身使用一个。
这是我用来从Lua调用批处理的一段代码,也许有帮助。 在win console(命令提示符)中打开并执行,在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
这是一种不使用控制台窗口而仅使用Lua标准API(即没有额外的库)来运行命令的方法。 在Win7 x64上测试。
function exec_silent(command) local p = assert(io.popen(command)) local result = p:read("*all") p:close() return result end
编辑:看下面的评论,它可能不适用于每个人。 我不知道为什么。