[英]Nodejs - Get environment variables of running process
我正在為 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 有類似的東西嗎?
您可以使用 child_process 模塊生成終端並在平台上執行以下命令並獲取變量,解析並使用或編寫本機節點模塊以訪問每個平台的適當 API 並獲取 output。
Windows(使用powershell,2019為PID)
(Get-Process -id 2019).StartInfo.EnvironmentVariables
Linux
tr '\0' '\n' < /proc/2019/environ
蘋果電腦
ps eww -o command 2019 | tr ' ' '\n'
Thanks to https://serverfault.com/a/66366 & https://stackoverflow.com/a/28193753/12167785 & https://apple.stackexchange.com/a/254253 & https://stackoverflow.com/ a/11547409/12167785 & https://stackoverflow.com/a/18765553/12167785
結合@SudhakarRS 的回答:
var child = require('child_process').execFile('powershell', [
'(Get-Process SomeProcess).StartInfo.EnvironmentVariables'
], function(err, stdout, stderr) {
console.log(stdout);
});
如果要調試它,請確保查看err
和stderr
。
用notepad
替換SomeProcess
對我有用,但使用notepad.exe
不行。
在 powershell 上,您可以使用Get-Process [process name]
具有特定名稱的進程。
因此,例如,如果我運行 4 個記事本實例並執行Get-Process notepad
,我會看到:
您可以使用(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);
}
);
^ 返回:
如果您只想獲取具有名稱的第一個進程,它是:
(Get-Process notepad)[0].StartInfo.EnvironmentVariables
^ 顯然用您的進程名稱替換notepad
。
簡單的方式(從這里,你可以使用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
在 javascript/nodejs 中沒有內置的方法可以做到這一點。 如果你真的需要這樣做,那么最好的方法是在終端中運行一個命令,然后解析 output 來構造你需要的 object。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.