使用带环境变量的popen函数调用。

在我的 Lua 程序中,我必须捕获来自外部程序的输出。这个外部程序需要一些环境变量。所以我这样做:

e = ""
e = e .. "A=100;"
e = e .. "B=Hi;"
e = e .. "C=Test;"
file = io.popen(e .. "/bin/aprogr")

显然,如果环境变量很大,popen() 的参数可能会超过限制。

是否有其他方法将环境传递给外部程序?

原文链接 https://stackoverflow.com/questions/8838038

点赞
stackoverflow用户837856
stackoverflow用户837856

ExtensionProposal API中有一个os.spawn函数。

你可以这样使用:

require"ex"
local proc, err = os.spawn{
    command = e.."/bin/aprogr",
    args = {
        "arg1",
        "arg2",
        --等等
    },
    env = {
        A = 100, --我假设它将值转换为字符串
        B = "Hi",
        C = "Test",
    },
    --你也可以指定stdin,stdout和stderr
    --查看提案页面以获取更多信息
}
if not proc then
    error("Failed to aprogrinate! "..tostring(err))
end

--如果您想等待进程完成:
local exitcode = proc:wait()

lua-ex-pai提供了POSIX和Windows的实现。

您可以在LuaForWindows分发中找到此实现的预编译二进制文件。

这是你使用情况的更简洁版本:

require"ex"
local file = io.pipe()
local proc = assert(os.spawn(e.."/bin/aprogr", {
    env={ A = 100, B = "Hi", C = "Test" },
    stdout = file,
}))
--按您的意愿写入文件
2012-01-12 19:07:49