# #ErrorStdOut

把任何阻止脚本运行的语法错误发送到标准错误流(stderr) 而不显示一个对话框.

    #ErrorStdOut Encoding

## 参数

Encoding [v1.1.33+]:
  编码字符串, 指定如何对输出进行编码. 例如, `#ErrorStdOut UTF-8` 将错误信息编码为 UTF-8, 然后再发送到 stderr. 无论捕获输出的程序是什么，都必须支持 UTF-8, 并且在某些情况下可能需要配置为期望如此. 如果省略, 默认为 `CP0`.

## Remarks

[AHK_L 42+]: 错误输出到 stderr(标准错误) 而不是 stdout(标准输出). 命令行和高级编辑器往往会同时显示这些信息. 这种不太规范的情况仅影响 [v1.1.19.01] 之前的版本.

这个指令可以让类似 TextPad, SciTE, Crimson 和 EditPlus 这些高级编辑器在语法错误发生时跳到有问题的行. 添加 #ErrorStdOut 指令到每个脚本中通常比使用命令行开关 /ErrorStdOut 更方便. (详情请参阅下面的设置说明)

因为 AutoHotkey 不是控制台程序, 错误将不会直接出现在命令行中. 这可以通过以下方法解决 1) [v1.1.33+] 使用 Ahk2Exe ConsoleApp 指令编译脚本, 或 2) 通过管道或重定向捕获脚本的输出. 例如:

    "C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" 2>&1 |more
    "C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" 2>""Syntax-Error Log.txt"

您还可以通过管道输出把信息直接传输到剪贴板, 只需下载 cb.zip(4 KB) 然后参考下面的例子:

    "C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" |cb.exe

注意: `2>&1` 将 stderr 重定向到 stdout, 而 `2>Filename` 只将 stderr 重定向到一个文件.

和其他指令一样, #ErrorStdOut 不能有条件地执行.

## 特定编辑器的设置说明:

EditPlus:

1. 在菜单栏选择 Tools(工具) > Configure User Tools(配置用户工具).
2. 点击按钮: Add Tool(增加工具) > Program(程序)
3. Menu Text(菜单名称): 可随意
4. Command(命令)(修改为您的 AutoHotkey.exe 路径): C:\Program Files\AutoHotkey\AutoHotkey.exe
5. Argument(参数): `/ErrorStdOut "$(FilePath)"`
6. Initial directory(初始文件夹): `$(FileDir)`
7. Capture output(捕获输出): Yes

TextPad:

1. 在菜单栏选择 Configure > Preferences(配置 > 参数).
2. 展开 Tools(工具) 菜单.
3. 点击 Add 按钮然后选择 "Program"(程序).
4. 复制并粘贴(修改为您的 cmd.exe 路径): C:\Windows\System32\cmd.exe -- 然后点击 OK.
5. 三击列表框中新添加的项(cmd.exe) 并将其重命名为您选择的自定义名称(如 Launch Script).
6. 点击 Apply(应用).
7. 从左侧树列表中选择新增的项, 然后填写下列信息:
8. Command(应该已经填好): `cmd.exe`(或者是它的完整路径)
9. Parameters(修改为您的 AutoHotkey.exe 路径): `/c ""C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "$File""`
10. 初始目录: `$FileDir`
11. 选择下列框: 1) Run minimized(最小化运行); 2) Capture output(捕获输出).
12. 点击 OK 之后新添加的项就应该已经出现在 Tools 菜单中了.

## 相关

FileAppend(因为它也可以发送文本到 stderr 或 stdout)

## 示例

发送任何阻止脚本启动的语法错误到 stderr, 而不是显示一个对话框.

    #ErrorStdOut

dftg