我写了一个小函数,它返回执行命令的结果。
function axsh(cmd)
local fullCmd=cmd:lower()
local f,err=io.popen(fullCmd,"r")
if not f then
return nil,"Could not create the process '"..fullCmd.."' \nError:"..err
end
return f:read("*all")
end
s=axsh("echo hi")
--print all bytes
print(s:byte(1,s:len()))
无论命令是什么,输出始终都有\ n:
104 105 10
编辑:它不仅适用于我自己的二进制命令行应用程序,而且适用于几乎所有操作系统命令:Windows:“dir”,“ipconfig”,“echo”...... Linux:“ls”,“ pwd“,”ls“......
但是当我单独运行命令(即Windows命令提示符)时,没有尾随换行符。我不需要它,所以需要在返回结果之前删除最后一个字符。
问题:这个换行总是存在于popen()的结果中吗?我在文档中找不到对此行为的任何引用。
答案 0 :(得分:2)
没有。 io.popen
只返回命令生成的任何字符串。您使用echo
作为命令,恰好在字符串后面添加换行符(这是使命令提示符出现在下一行,而不是在输出之后)。
您可以尝试使用以下方法对其进行测试:
s=axsh([[lua -e "io.write([=[hi]=])"]])
return string.byte(s,1,-1)
不会以换行符结束输出。