捕获 execSync 错误
Posted
技术标签:
【中文标题】捕获 execSync 错误【英文标题】:Catching execSync erross 【发布时间】:2016-10-02 11:58:10 【问题描述】:我正在使用execSync
运行soffice
命令。我遇到的问题是当抛出错误execSync
只是将错误记录到控制台,无法捕获它。我尝试使用 try
catch
语句,但它仍然只是将错误记录到控制台。
function convertToPdf(filepath, destpath)
var cmd = 'sofice command';
try
var res = execSync(cmd, encoding: 'utf8' );
catch (e)
console.log("Errors:", e);
console.log("res:", res);
convertToPdf("test.docx");
我运行它并取回它:
Error: source file could not be loaded
res:
请注意,我的 catch 语句从未被记录,即使明确抛出了错误,但另一个 Error:
消息会自动记录,因为我没有记录。
【问题讨论】:
The manual 说“它会抛出”,但仅在某些情况下:“如果进程超时,或者退出代码非零”。你有这些吗? @ÁlvaroGonzález 我怎么知道我什至不能检查退出代码。它所做的只是登录以筛选我在上面发布的内容 我不是 Node 专家,但文档建议(进程超时分开):如果它不抛出错误,则为零,否则为非零(您可以从错误)。由于来自 LibreOffice 的 soffice(假设你是这个意思)是一个 GUI 程序,我不会对它在错误时不返回非零代码感到惊讶。这在大多数 shell 中应该很容易测试。如果你告诉我们你有什么 shell,我们可能会告诉你如何从控制台读取返回值。如果你告诉我们确切的soffice
命令和你得到的错误,我们甚至可以自己重现它。
你是如何解决@Rodrigo 的问题的?
【参考方案1】:
试试这个:
function myExecSync(command, trim = true, cwd = pwd, opts = )
const ret = execSync(command, cwd, ...opts ).toString('utf-8');
return trim ? ret.trim() : ret;
并手动编写 stdio: 'pipe' 以防止 childprocess.stderr 输出到控制台。喜欢
myExecSync(command, true, cwd, stdio: 'pipe' )
【讨论】:
以上是关于捕获 execSync 错误的主要内容,如果未能解决你的问题,请参考以下文章