我正在编写一个通过调用打印的 ruby 脚本:
`/usr/bin/lp -d PrinterQueue -U #{user} #{fileToBePrinted}`
我想优雅地处理打印错误,但无法确定lp执行时返回的内容。通常是这样的字符串:
请求 id 是 PrinterQueue-68 (1 个文件)
有没有什么地方可以描述lp在奇怪的情况下应该返回什么?
谢谢!
请允许我稍微详细说明一下我的评论。
您应该忘记为此使用反引号并直接转到Open3. 特别是Open3.capture3:
out, err, status = Open3.capture3("/usr/bin/lp -d PrinterQueue -U #{user} #{fileToBePrinted}")
然后out将是一个包含来自 的标准输出的字符串lp,err将是一个包含标准错误的字符串,并且status将是一个Process::Status实例。您检查命令status.success?是否lp有效并查看err(或err向用户显示)是否无效。
该字符串request id is PrinterQueue-68 (1 file(s))是lp命令打印的内容,而不是它返回的内容。
如果lp命令失败,它将返回非零退出状态。(它还应该打印一条错误消息,但这些消息不一定会记录在案,并且可能会从一个版本更改为下一个版本。)
据我了解,您可以在$?使用反引号调用命令后查询 的值。如果命令成功,$?则应该为 0。如果失败,它将有一些非零值。
在评论中,@muistooshort 建议使用open3; 这可能比使用反引号更健壮和灵活。