在 Lua 中取回 os.execute 的输出

Posted

技术标签:

【中文标题】在 Lua 中取回 os.execute 的输出【英文标题】:Get back the output of os.execute in Lua 【发布时间】:2010-09-13 01:00:33 【问题描述】:

当我在 Lua 中执行“os.execute”时,控制台会快速弹出,执行命令,然后关闭。但是有没有办法只使用标准 Lua 库来取回控制台输出?

【问题讨论】:

【参考方案1】:

如果你有 io.popen,那么这就是我使用的:

函数 os.capture(cmd, raw) 本地 f = 断言(io.popen(cmd,'r')) 本地 s = assert(f:read('*a')) f:关闭() 如果原始则返回 s 结束 s = string.gsub(s, '^%s+', '') s = string.gsub(s, '%s+$', '') s = string.gsub(s, '[\n\r]+', ' ') 返回 结尾

如果您没有 io.popen,那么您的系统上可能没有 popen(3),并且您处于深酸奶中。但是所有的 unix/mac/windows Lua 端口都会有 io.popen。

gsub 业务去除了前导和尾随空格并将换行符转换为空格,这与 shell 使用其 $(...) 语法所做的大致相同。)

【讨论】:

你有上面的使用例子吗? 我用它来获取某些专有 UPS 软件的剩余电量百分比 local curPercent = os.capture("sudo pwrstat -status | grep 'Battery Capacity' | cut -d ' ' -f 3", false) --make sure you have rule in /etc/sudoers to run this pwrstat without password (NOPASSWD) 我将上面 os.capture 函数的第二个选项设置为 false 以便它会去掉换行符你通常会得到。 gsub 业务是关于什么的? @mpen 从头到尾修剪空白,并将回车+换行替换为单个空格。【参考方案2】:

我想你想要这个http://pgl.yoyo.org/luai/i/io.popenio.popen。但它并不总是被编译进去。

【讨论】:

【参考方案3】:

我不具体了解 Lua,但您通常可以将命令运行为:

comd >comd.txt 2>&1

将输出和错误捕获到文件 comd.txt,然后使用语言文件 I/O 函数将其读入。

如果语言本身不提供捕获标准输出和错误,我会这样做。

【讨论】:

这是特定于 Windows 的,但它是为我解决的方法。传递给执行的整个命令字符串的示例是“cmd.exe /c c:\pathtoit\someprogram.exe -arg1 somefile > c:\temp\out.txt 2>&1”。 2> 部分对我来说是诀窍。 这不是 Windows 特定的。它也适用于 Unix、Linux、BSD、OS X 和许多其他系统。我不是无聊的临时文件的最大粉丝,所以我不喜欢这种方法,尽管它在技术上是有效的。 2>&1 部分将标准错误(输出 2)重定向到标准输出(输出 1),该输出已经重定向到 comd.txt(>1> 的简写)

以上是关于在 Lua 中取回 os.execute 的输出的主要内容,如果未能解决你的问题,请参考以下文章

Lua:无限循环中的os.execute(“sleep n”)无法被^ C停止

lua调用shell 脚本

在java中执行Lua脚本?

LUA中获得服务器IP

如何使用 Lua 运行可执行文件?

[编程]lua有暂停运行的函数吗?