Я пишу свое первое расширение 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
. Сейчас я далеко за пределами своей зоны комфорта. Пожалуйста, посоветуйте мне, как действовать.