【问题标题】:VS Code task process stdout/stderrVS Code 任务流程stdout/stderr
【发布时间】:2019-11-06 20:18:48
【问题描述】:

我正在尝试为 VS Code 扩展编写一些测试。

扩展基本上是创建一些任务,使用ShellExecution运行本地可执行文件,例如:

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

我希望能够测试 shell 进程,但无法访问此进程,因此无法附加到任何输出流,也无法获取退出代码。

在我的测试中,我执行如下任务:await vscode.tasks.executeTask(task);,无论ShellExecution 创建的进程的退出代码如何,它都会成功运行。

有什么方法可以访问执行任务生成的子进程?

【问题讨论】:

    标签: visual-studio-code vscode-extensions vscode-tasks


    【解决方案1】:

    使用 Node.js 的 child_process,这很容易做到。我将它用于run an external Java jar 并捕获其输出以获取错误。主要部分是:

                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).
                    }
                });
    

    【讨论】:

    • 感谢您的回答。是的,如果您可以控制流程的创建,这是相当直接的做法。将ShellExecution 用作vscode.Task 的一部分的问题在于该进程没有公开(据我所知)。
    猜你喜欢
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2011-05-05
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多