Как я могу использовать путь Python в своем расширении кода Visual Studio? - PullRequest
1 голос
/ 30 марта 2020

Я пишу свое первое расширение VSCode. Вкратце, расширение открывает терминал (PowerShell) и выполняет команду:

term = vscode.window.activeTerminal;
term.sendText("ufs put C:\\\Users\\<userID>\\AppData\\Local\\Programs\\Python\\Python38-32\\Lib\\site-packages\\mymodule.py");

После выбора среды Python VSCode должен знать, где находится Python (python .pythonPath). Но путь к Python, очевидно, будет различаться в зависимости от установки Python, версии и так далее. Поэтому я надеялся, что смогу сделать что-то вроде:

term.sendText("ufs put python.pythonPath\\Lib\\site-packages\\mymodule.py");

Но как я могу сделать это в своем расширении (TypeScript)? Как мне обратиться к python .pythonPath?

Моя конфигурация:

ОБНОВЛЕНИЕ :

Натан, спасибо за ваш комментарий. Я использовал дочерний процесс , как предложено. Он выполняет команду для поиска пипса. Полагаться на расположение pip не является пуленепробиваемым, но он работает на данный момент:

var pwd = 'python.exe -m pip --version';
const cp = require('child_process');
cp.exec(pwd, (err, stdout, stderr) => {
    console.log('Stdout: ' + stdout);
    console.log('Stderr: ' + stderr);
    if (err) {
        console.log('error: ' + err);
    }
});

Не уверен, где go отсюда для обработки stdout, но я попытался child_process.spawn используя this принятый ответ :

function getPath(cmd, callback) {
    var spawn = require('child_process').spawn;
    var command = spawn(cmd);
    var result = '';
    command.stdout.on('data', function (data) {
        result += data.toString();
    });
    command.on('close', function (code) {
        return callback(result);
    });
}
let runCommand = vscode.commands.registerCommand('extension.getPath', function () {
    var resultString = getPath("python.exe -m pip --version", function (result) { console.log(result) });
    console.log(resultString);
});

Надеюсь, это даст мне стандартный вывод в виде строки. Но единственное, что я получил, было undefined. Сейчас я далеко за пределами своей зоны комфорта. Пожалуйста, посоветуйте мне, как действовать.

...