stdout 和 stderr 输出可以通过两种方式消费:通过回调实时流式获取,或在命令结束后一次性获取全部输出。实时流式适合需要在运行过程中监控的长时间运行命令或后台命令;获取全部输出适合运行时长可预期且较短的命令。
通过回调流式获取日志
将onStdout / onStderr(JavaScript)或 on_stdout / on_stderr(Python)传给 commands.run(...)。输出一旦产生,回调就会立即收到,stdout 和 stderr 分别传递。
保持回调轻量。避免在回调中执行长时间阻塞操作——这会阻塞事件处理,并可能导致底层连接断开。如需重度处理,请先缓冲或交给其他任务/线程处理。
流式获取后台命令日志
若希望在命令流式输出的同时让程序继续运行,可使用background: true(JS)或 background=True(Python)启动命令。此时会立即返回一个 CommandHandle,而不是等待结果。你可以附加同样的 onStdout / onStderr 回调,继续处理其他工作,然后调用 wait() 阻塞至命令结束并获取其 CommandResult。
命令结束后获取全部日志
如果不需要实时输出,可在前台运行命令,并从返回的CommandResult 中读取完整的 stdout 和 stderr。对于运行时长可预期且较短的命令,这是最简单的方式。
CommandResult 字段
以非零退出码结束的命令会抛出
CommandExitError(JS)/ CommandExitException(Python)。该异常携带同样的 stdout、stderr、exitCode 和 error 字段,因此失败时仍可检查输出。