获取生成的进程环境
get spawned process environment
在我的节点应用程序中,我想生成 vcvars32.bat 然后使用它设置的环境生成 cl.exe。
有办法从已结束的子进程中获取新的 "Environment key-value pairs" 吗?
非常感谢。
经过一些尝试,我开发了这个在我看来很诡异的解决方案:
const cp = require("child_process");
const process = require("process")
const fs = require("fs")
fs.writeFileSync("testCL.bat",
"call \"c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat\"\r\nset\r\n")
var env1 = {};
function onData(str) {
//console.log(str.toString())
/** @type{String[]} */
var str = str.toString().split(/[\r\n]{1,2}/);
for(let i=0;i<str.length-1;++i) {
var m = str[i].match(/([^=]+)=(.*)$/);
if(m) {
env1[ m[1].toUpperCase() ] = m[2];
}
}
}
var p1 = cp.spawn( "testCL.bat",{env:process.env})
p1.stdout.on('data', onData);
p1.on("exit", (c) => {
fs.unlink("testCL.bat", ()=>{});
var p2 = cp.spawn( "cl.exe",[], { "env":env1 })
p2.stdout.on('data', d=>console.log(d.toString()));
});
所以我创建了一个批处理文件,其中包含对 vcvars 的调用和命令集,然后解析该集的输出以创建环境变量。
在我的节点应用程序中,我想生成 vcvars32.bat 然后使用它设置的环境生成 cl.exe。
有办法从已结束的子进程中获取新的 "Environment key-value pairs" 吗?
非常感谢。
经过一些尝试,我开发了这个在我看来很诡异的解决方案:
const cp = require("child_process");
const process = require("process")
const fs = require("fs")
fs.writeFileSync("testCL.bat",
"call \"c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat\"\r\nset\r\n")
var env1 = {};
function onData(str) {
//console.log(str.toString())
/** @type{String[]} */
var str = str.toString().split(/[\r\n]{1,2}/);
for(let i=0;i<str.length-1;++i) {
var m = str[i].match(/([^=]+)=(.*)$/);
if(m) {
env1[ m[1].toUpperCase() ] = m[2];
}
}
}
var p1 = cp.spawn( "testCL.bat",{env:process.env})
p1.stdout.on('data', onData);
p1.on("exit", (c) => {
fs.unlink("testCL.bat", ()=>{});
var p2 = cp.spawn( "cl.exe",[], { "env":env1 })
p2.stdout.on('data', d=>console.log(d.toString()));
});
所以我创建了一个批处理文件,其中包含对 vcvars 的调用和命令集,然后解析该集的输出以创建环境变量。