VS код задачи процесса stdout / stderr - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь написать тест для расширения кода VS.

Расширение в основном создает некоторые задачи, используя ShellExecution для запуска локального исполняемого файла, например:

new Task(
  definition,
  folder,
  name,
  source,
  new ShellExecution('./runme', { cwd })
);

Я хотел бы иметь возможность протестировать процесс оболочки, но неУ него нет доступа к этому процессу, поэтому он не может ни присоединиться ни к одному из потоков вывода, ни получить код выхода.

В своих тестах я выполняю задачу следующим образом: await vscode.tasks.executeTask(task);, которая успешно выполняется независимо от кода завершения процесса, созданного ShellExecution.

Есть ли способ получить доступ к дочернему процессу, сгенерированному при выполнении задачи?

1 Ответ

1 голос
/ 07 ноября 2019

С Node.js 'child_process это просто сделать. Я использую его для запуска внешнего jar-файла Java и захвата его вывода для получения ошибок. Основная часть:

            let java = child_process.spawn("java", parameters, spawnOptions);

            let buffer = "";
            java.stderr.on("data", (data) => {
                let text = data.toString();
                if (text.startsWith("Picked up _JAVA_OPTIONS:")) {
                    let endOfInfo = text.indexOf("\n");
                    if (endOfInfo == -1) {
                        text = "";
                    } else {
                        text = text.substr(endOfInfo + 1, text.length);
                    }
                }

                if (text.length > 0) {
                    buffer += "\n" + text;
                }
            });

            java.on("close", (code) => {
                let parser = new ErrorParser(dependencies);
                if (parser.convertErrorsToDiagnostics(buffer)) {
                    thisRef.setupInterpreters(options.outputDir);
                    resolve(fileList);
                } else {
                    reject(buffer); // Treat this as non-grammar error (e.g. Java exception).
                }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...