【问题标题】:How to capture stdout of an ST3 build?如何捕获 ST3 构建的标准输出?
【发布时间】:2017-01-09 04:40:40
【问题描述】:

我的一般问题是,至少对于调试构建文件,我希望看到执行的命令的确切版本。我将在下面举一个例子。我还想查看发送到 STDOUT 的执行输出,因为 ST 只捕获到 STDERR 的输出。

这是我为什么想要这个的一个例子。

我已经创建了构建文件 sql.sublime_build 并将它保存在 Sublime 包目录中。

{ “cmd”:[“psql”、“-U”、“tevs”、“-d”、“tevs”、“-o”、“psql_out.txt”、“-f”、“$file”] }

我在 ST3 中有一个向 psql_out.txt 开放的窗格,以便在运行构建更改其内容时看到它重新加载。

如果我从命令行运行 psql 并输入来自它的输入,我有一个文件 testbuild.sql。

当我为 testbuild.sql 打开 ST3 选项卡并按 command-B 时,我看到 ST3 页脚行更改为“building”几秒钟,但输出文件没有变化,并且没有任何内容出现在键入命令-B 时打开的 ST3 窗口的底部窗格。

看看 ST3 是如何调用命令的会很有帮助。

我更喜欢不涉及修改 Sublime Text 本身的解决方案。

PS 我也尝试过更长的形式

{ “cmd”:[“psql”、“-U”、“tevs”、“-d”、“tevs”、“-o”、“/Users/Wes/Dropbox/Programming/ElectionTransparency/psql_out.txt”、“ -f", "$file"], “working_dir”:“/Users/Wes/Dropbox/Programming/ElectionTransparency” ?}

【问题讨论】:

  • 在尝试构建时从 ST3 获取其他诊断信息也会很有帮助。例如,在一次迭代中,我有一个带有错误 JSON 语法的 .sublime_build 文件。如果被告知 JSON 没有解析,那就太好了。

标签: sublimetext3


【解决方案1】:

按顺序处理问题的各个部分:

我想查看所执行命令的确切版本。

只要您的构建系统没有将选项quiet 设置为true,Sublime 就会在您执行构建系统时将其正在运行的内容输出到其控制台。 quiet 默认为 false,所以只要你不设置它,你就会看到它在运行什么。例如:

您可以通过菜单中的View > Show Console 或按Ctrl+`

打开控制台

我还想查看发送到 STDOUT 的执行输出,因为 ST 只捕获到 STDERR 的输出。

Sublime 捕获并显示 stdoutstderr 并将它们显示在构建结果面板中。造成这种情况的最常见原因通常与程序缓冲其输出有关,这使得它直到程序终止或生成一大堆输出后才会出现在构建结果中。

假设您实际上仍然想生成一个文件的输出并在构建结果窗口中看到它,类似以下的内容应该可以工作(警告:我不使用也不熟悉 psql):

{ 
    "shell_cmd": "psql -U tevs -d tevs -f $file | tee psql_out.txt",
    "selector": "source.sql"
}

这使用shell_cmd 而不是cmd,它允许使用shell 重定向。通过不指定-o,psql 会将其输出发送到stdout(如果不指定,则需要设置适当的参数以使其执行此操作)。 tee 程序通过管道将stdin 传递到stdout 并将其保存到您提供给它的文件列表中,因此您可以在终端中看到输出并同时将其保存到文件中。

在尝试构建时从 ST3 获取其他诊断信息也会很有帮助。例如,在一次迭代中,我有一个带有错误 JSON 语法的 .sublime_build 文件。如果被告知 JSON 未解析,那就太好了。

对于构建系统,没有直接的方法可以做到这一点;如果它不解析,它就不会出现在构建系统菜单中,并且与其他此类文件不同,Sublime 不会抛出错误。但是,语法高亮会在它认为语法无效时为您提供提示,这样会有所帮助(这里shell_cmd 行缺少尾随逗号,因此语法在以下冒号字符处很疯狂):

如果您没有看到这些错误提示,可能是因为您使用的配色方案无法处理它们。

【讨论】:

  • 非常详尽的答案。谢谢!
  • 对于其他新手(也许还有 ST3 文档编写者),这里的重要教训在 ST3 文档中并不明显:(1)查看控制台以获取结果窗口中未显示的信息; (2) "cmd" 不启用 shell 提供的功能,但 "shell_cmd" 可以!再次感谢 OdatNurd!
  • @WesR 用于特定突出显示.sublime-build 文件(以及其他Sublime 格式,如.sublime-preferences),安装PackageDev 包,各种语法选项将在语法菜单下提供包开发。作为我自己项目之一的插件,我的Neon Color Scheme 对各种 PackageDev 格式有特定的支持,因此您可以轻松地spot errors
猜你喜欢
  • 2010-10-29
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
相关资源
最近更新 更多