我正在写一个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
;这可能比使用反引号更强大和灵活。