我很高兴在Lua的windows系统中使用xzxx 在Windows中使用lua os.execute启动一个没有CMD闪存的程序
strProgram = '"C:\\Program Files\\Ps Pad\\PSPad.exe"'
strCmd = 'start "" '..strProgram
os.execute(strCmd)
启动程序。这样可以正常工作,启动程序和脚本完成。 它如何在命令窗口闪烁几分之一秒,是否有人从Lua启动程序。
我很高兴在Lua的windows系统中使用xzxx 在Windows中使用lua os.execute启动一个没有CMD闪存的程序
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的人,看看他是否可以为我添加一个函数,如果他将代码指向他需要它。 – 2011-06-16 16:45:34
我相信至少有一种方法可以在不使用控制台的情况下使用io.popen在没有额外库的情况下弹出窗口来执行命令。请看我的答案。 – 2015-04-15 12:58:31
这是一种在没有控制台窗口的情况下仅使用Lua标准API(即没有额外的库)来运行命令的方式。在Win7 x64上测试。
function exec_silent(command)
local p = assert(io.popen(command))
local result = p:read("*all")
p:close()
return result
end
编辑:请参阅下面的评论,它可能不适用于所有人。我不知道为什么。
这是我用来从Lua调用批处理的一段代码,可能有帮助。 在赢控制台(命令提示符)打开并执行,同时在UNIX(MAC |尼克斯)
-- 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
如果你只是用'strProgram'代替strCmd'的'会发生什么?换句话说,你真的需要'开始'吗? – BMitch 2011-06-15 19:04:36
启动的程序一直运行并且Lua脚本一直挂起直到程序关闭,命令窗口保持打开状态。 – 2011-06-15 19:52:08
从文档看,它们看起来像是通过OS shell运行它(对不起,我在Linux上,所以我无法自己测试)。除非有人知道Lua技巧,否则您可能需要使用执行'fork/exec'而不是'system'调用的主机语言(例如C)编写自己的函数,并将该API导出到Lua。 – BMitch 2011-06-15 20:54:10