我正在编写一个通过调用打印的 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
; 这可能比使用反引号更健壮和灵活。