Javascript Nodejs-获取正在运行的进程的环境变量

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将为您提供所需的:) 你可以多读一些 编辑:它只为

我正在为vscode编写扩展,我需要获取已经运行的进程的环境变量。但我没能找到一个办法

我知道如何使用psutil在python中执行此操作:

psutil.process_iter(attrs=['name','exe'])中进程的
:
如果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