Node.js-获取正在运行的进程的环境变量

时间:2019-10-07 15:14:20

标签: javascript node.js typescript vscode-extensions

我正在为vscode编写扩展,并且我需要获取已经在运行的进程的环境变量。但是我找不到解决方法。

我知道如何使用psutil在python中做到这一点:

for proc in psutil.process_iter(attrs=['name', 'exe']):
    if proc.info['name'].lower() == 'SomeProcess.exe'.lower():
        return proc.environ()

javascript / nodejs是否有类似的东西?

5 个答案:

答案 0 :(得分:4)

您可以使用child_process模块​​生成一个终端并在平台上执行以下命令并获取变量,解析并使用或编写本机节点模块来访问每个平台的正确API并获取输出。

Windows(使用powershell,2019年为PID)

(Get-Process -id 2019).StartInfo.EnvironmentVariables

Linux

tr '\0' '\n' < /proc/2019/environ

Mac

ps eww -o command 2019  | tr ' ' '\n'

感谢https://serverfault.com/a/66366https://stackoverflow.com/a/28193753/12167785https://apple.stackexchange.com/a/254253https://stackoverflow.com/a/11547409/12167785https://stackoverflow.com/a/18765553/12167785

答案 1 :(得分:3)

结合@SudhakarRS的答案:

var child = require('child_process').execFile('powershell', [ 
    '(Get-Process SomeProcess).StartInfo.EnvironmentVariables' 
], function(err, stdout, stderr) { 
    console.log(stdout);
}); 

如果要调试它,请确保先查看errstderr

SomeProcess代替notepad对我有用,但是使用notepad.exe无效。

在powershell上,您可以使用Get-Process [process name]获得具有特定名称的进程。

例如,如果我有四个记事本实例正在运行并执行Get-Process notepad,我将看到以下内容:

Processes

您可以使用(Get-Process notepad).Id获取进程ID,该ID返回:

Image

您可以使用相同的代码选择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);
    }
);

^返回:

Return

如果您只想使用名称来获取第一个进程,则为:

(Get-Process notepad)[0].StartInfo.EnvironmentVariables

^显然将notepad替换为您的进程名称。

答案 2 :(得分:1)

简便的方法(从here开始,您可以使用类似shelljs的方法,然后运行:

ps faux | grep 'PROCESS_NAME'

然后提取进程ID(我正在处理正则表达式),然后执行以下操作:

cat /proc/THE_PROCESS/environ | tr '\0' '\n'

您将把env vars返回为类似以下的字符串:

THEVAR=1
ANOTHERVAR=2

我认为您只是用'\ n'分割了字符串,但我正在检查!

一旦找到正则表达式,我将对其进行更新。 **您是在linux / mac还是Windows?

更新:检查https://github.com/shelljs/shx是否具有跨平台

答案 3 :(得分:0)

是:

process.env将为您提供所需的东西:)

您可以阅读更多here

EDIT :它只会为您进入的过程提供环境变量...我是否误解了,并且您想要另一个过程的变量?

答案 4 :(得分:0)

javascript / nodejs中没有内置的方法可以做到这一点。如果确实需要这样做,那么最好的方法是在终端中运行命令,然后解析输出以构造所需的对象。