如何捕获ST3构建的stdout?

时间:2017-01-09 04:40:40

标签: sublimetext3

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

以下是我可能想要这个的原因示例。

我已经创建了构建文件sql.sublime_build并将其保存在Sublime Packages Directory中。

  

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

我在ST3中有一个窗格打开到psql_out.txt,这样如果运行build会改变其内容,我会看到它重新加载。

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

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

时打开

确切地看到ST3如何调用该命令将非常有帮助。

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

PS我也试过更长的形式

  

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

1 个答案:

答案 0 :(得分:2)

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

  

我希望看到执行命令的确切版本。

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

Simple build

您可以通过菜单中的View > Show Console打开控制台,或按 Ctrl +`

  

我还希望看到该执行的输出被发送到STDOUT,因为ST只捕获到STDERR的输出。

Sublime捕获并显示stdoutstderr,并在构建结果面板中显示它们。这种做法没有达到预期效果的最常见原因通常与程序缓冲其输出有关,这使得它在程序终止或生成一大堆输出之前不会出现在构建结果中。

Sublime showing build output

假设您实际上仍想生成输出到文件并在构建结果窗口中看到它,那么类似下面的内容应该有用(请注意:我不使用也不熟悉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行缺少一个尾随逗号,因此语法对以下冒号字符很生气):

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