Javascript Nodejs-获取正在运行的进程的环境变量
我正在为vscode编写扩展,我需要获取已经运行的进程的环境变量。但我没能找到一个办法 我知道如何使用psutil在python中执行此操作: psutil.process_iter(attrs=['name','exe'])中进程的Javascript Nodejs-获取正在运行的进程的环境变量,javascript,node.js,typescript,vscode-extensions,Javascript,Node.js,Typescript,Vscode Extensions,我正在为vscode编写扩展,我需要获取已经运行的进程的环境变量。但我没能找到一个办法 我知道如何使用psutil在python中执行此操作: psutil.process_iter(attrs=['name','exe'])中进程的: 如果proc.info['name'].lower()=='SomeProcess.exe'.lower(): 返回过程环境() javascript/nodejs有类似的功能吗?是的: process.env将为您提供所需的:) 你可以多读一些 编辑:它只为
:
如果proc.info['name'].lower()=='SomeProcess.exe'.lower():
返回过程环境()
javascript/nodejs有类似的功能吗?是的:
process.env
将为您提供所需的:)
你可以多读一些
编辑:它只为您所处的过程提供环境变量。。。我是否误解了,您想要另一个进程的变量?您可以使用child\u process module生成终端并执行以下命令wrt platform并获取变量,解析并使用或编写本机节点模块以访问每个平台的适当API并获取输出 Windows(使用powershell,2019是PID) Linux 感谢&&& &
结合@Sudhakars的答案:
var child = require('child_process').execFile('powershell', [
'(Get-Process SomeProcess).StartInfo.EnvironmentVariables'
], function(err, stdout, stderr) {
console.log(stdout);
});
如果要调试它,请确保查看err
和stderr
将SomeProcess
替换为notepad
对我有效,但使用notepad.exe
不行
在powershell上,您可以使用get Process[Process name]
获取具有特定名称的进程
因此,例如,如果我运行了4个记事本实例,并且执行了Get Process notepad
,我会看到:
您可以使用(获取进程记事本).Id
获取进程Id,它返回:
您可以使用相同的代码选择ID:
var child = require('child_process').execFile(
'powershell',
['(Get-Process notepad).Id'],
function(err, stdout, stderr) {
var ids = stdout.split("\r\n");
ids.pop(); //remove the blank string at the end
console.log(ids);
}
);
^返回:
如果您只想获取具有名称的第一个进程,它是:
(获取进程记事本)[0]。StartInfo.EnvironmentVariables
^显然,将记事本
替换为您的进程名称。简易方式(从,您可以使用类似于然后运行:
ps faux | grep 'PROCESS_NAME'
然后提取进程id(我正在处理正则表达式),然后执行以下操作:
cat /proc/THE_PROCESS/environ | tr '\0' '\n'
您将以字符串形式返回环境变量,如下所示:
THEVAR=1
ANOTHERVAR=2
我想你只是用“\n”来分割字符串,但我正在检查
一旦我计算出正则表达式,我就会更新它。**您是在linux/mac还是windows上
更新:检查跨平台在javascript/nodejs中没有内置的方法可以做到这一点。如果确实需要这样做,那么最好的方法是在终端中运行一个命令,然后解析输出以构造所需的对象。我在Windows上,但由于这是一个扩展,如果它在所有具有同一个解决方案。嗯,ShellJS应该是可移植的,我现在无法测试,但会尽快测试。请随意接受解决您特定情况的任何其他相关答案,我建议编辑标题和说明,使其包括windows。我说您可以将这些答案组合起来,然后确定您正在哪个平台上运行运行正确的命令!您希望使用
\r\n
进行拆分(在windows上,至少我可以事先对其进行测试,我会尽全力!它是否也适用于进程名称而不是PID?(Get Process-id processnmae)。StartInfo.EnvironmentVariables[适用于windows]@psclkhoury我建议您依赖于PID,因为可能有多个进程具有相同的名称是的,当然,但我不知道进程ID。我只知道进程名称。噢。ps-ef | awk'$8==“name_of_process”{print$2}”(linux,从name获取PID,然后使用答案)process.env是移动。
ps faux | grep 'PROCESS_NAME'
cat /proc/THE_PROCESS/environ | tr '\0' '\n'
THEVAR=1
ANOTHERVAR=2