Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Lua中os.execute的输出_Lua - Fatal编程技术网

获取Lua中os.execute的输出

获取Lua中os.execute的输出,lua,Lua,当我在Lua中执行“os.execute”时,控制台会快速弹出,执行命令,然后关闭。但是,是否只有使用标准Lua库才能返回控制台输出?我不知道Lua的具体情况,但您通常可以按以下方式运行命令: comd >comd.txt 2>&1 要将输出和错误捕获到comd.txt文件,请使用语言文件I/O函数将其读入 如果语言本身没有提供捕获标准输出和错误的功能,我会这样做。我想您需要这个io.popen。但它并不总是在中编译。如果您有io.popen,那么这就是我使用的: func

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

我不知道Lua的具体情况,但您通常可以按以下方式运行命令:

comd >comd.txt 2>&1
要将输出和错误捕获到comd.txt文件,请使用语言文件I/O函数将其读入


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

我想您需要这个io.popen。但它并不总是在中编译。

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

function os.capture(cmd, raw) local f = assert(io.popen(cmd, 'r')) local s = assert(f:read('*a')) f:close() if raw then return s end s = string.gsub(s, '^%s+', '') s = string.gsub(s, '%s+$', '') s = string.gsub(s, '[\n\r]+', ' ') return s end 函数os.capture(cmd,raw) 本地f=assert(io.popen(cmd,'r')) 本地s=assert(f:read('*a')) f:关闭() 如果是raw,则返回s end s=string.gsub(s,“^%s+”,“”) s=string.gsub(s,“%s+$”,“”) s=string.gsub(s,'[\n\r]+','') 返回s 结束 如果您没有io.popen,那么您的系统上可能没有popen(3),并且您正在喝深度酸奶。但所有unix/mac/windows Lua端口都将具有io.popen


(gsub的
gsub
业务去掉了前导空格和尾随空格,并将换行变成空格,这大致就是shell使用
$(…)
语法所做的。)

这是特定于Windows的,但对我来说是一种解决方法。传递给执行的整个命令字符串的示例是“cmd.exe/c:\pathtoit\someprogram.exe-arg1 somefile>c:\temp\out.txt 2>&1”。2>部分是我的窍门。这不是Windows特有的。它还可以在Unix、Linux、BSD、OSX和许多其他系统中工作。我不是轻浮的临时文件的最大粉丝,所以我不喜欢这种方法,尽管它在技术上是有效的。
2>&1
部分将标准错误(输出2)重定向到标准输出(输出1),标准输出已经重定向到comd.txt(
1>
的缩写)您有如何使用上述的示例吗?我用它来获得一些专有UPS软件的剩余电量百分比
local curPercent=os.capture(“sudo pwrstat-状态| grep'电池容量'| cut-d'-f 3”,false)--确保您在/etc/sudoers中有无密码运行此pwrstat的规则(NOPASSWD)
我将上面的os.capture函数的第二个选项设置为
false
,这样它将删除您通常获得的换行符。这是什么
gsub
业务?