1

我正在编写一个通过调用打印的 ruby​​ 脚本:

`/usr/bin/lp -d PrinterQueue -U #{user} #{fileToBePrinted}`

我想优雅地处理打印错误,但无法确定lp执行时返回的内容。通常是这样的字符串:

请求 id 是 PrinterQueue-68 (1 个文件)

有没有什么地方可以描述lp在奇怪的情况下应该返回什么?

谢谢!

4

2 回答 2

2

请允许我稍微详细说明一下我的评论。

您应该忘记为此使用反引号并直接转到Open3. 特别是Open3.capture3

out, err, status = Open3.capture3("/usr/bin/lp -d PrinterQueue -U #{user} #{fileToBePrinted}")

然后out将是一个包含来自 的标准输出的字符串lperr将是一个包含标准错误的字符串,并且status将是一个Process::Status实例。您检查命令status.success?是否lp有效并查看err(或err向用户显示)是否无效。

于 2011-11-11T06:32:56.223 回答
0

该字符串request id is PrinterQueue-68 (1 file(s))lp命令打印的内容,而不是它返回的内容。

如果lp命令失败,它将返回非零退出状态。(它还应该打印一条错误消息,但这些消息不一定会记录在案,并且可能会从一个版本更改为下一个版本。)

据我了解,您可以在$?使用反引号调用命令后查询 的值。如果命令成功,$?则应该为 0。如果失败,它将有一些非零值。

在评论中,@muistooshort 建议使用open3; 这可能比使用反引号更健壮和灵活。

于 2011-11-11T06:31:30.857 回答