popen()在结果的末尾添加换行符(\ n)吗?

时间:2011-09-05 08:31:04

标签: lua

我写了一个小函数,它返回执行命令的结果。

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()的结果中吗?我在文档中找不到对此行为的任何引用。

1 个答案:

答案 0 :(得分:2)

没有。 io.popen只返回命令生成的任何字符串。您使用echo作为命令,恰好在字符串后面添加换行符(这是使命令提示符出现在下一行,而不是在输出之后)。

您可以尝试使用以下方法对其进行测试:

s=axsh([[lua -e "io.write([=[hi]=])"]])
return string.byte(s,1,-1)

不会以换行符结束输出。