Что возвращает lp-файл CUPS?

#ruby #shell #cups

#ruby #оболочка #cups

Вопрос:

Я пишу скрипт ruby, который печатает, вызывая:

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

Я хотел бы корректно обрабатывать ошибки печати, но не могу определить, что lp возвращается при выполнении этого. Обычно это строка, подобная этой:

идентификатор запроса — PrinterQueue-68 (1 файл (ы))

Есть ли где-нибудь описание того, что lp должно возвращаться в странных случаях?

Спасибо!

Комментарии:

1. Вы проверили справочную страницу?

2. В нем вообще не обсуждаются возвращаемые значения 🙁

3. open3 возможно, это лучший вызов, чем обратные ссылки, таким образом, вы могли бы получить стандартный вывод, стандартную ошибку и возвращаемое значение (которое должно быть ненулевым, если произошла ошибка).

Ответ №1:

Позвольте мне немного уточнить мой комментарий.

Вам следует забыть об использовании обратных ссылок для этого и перейти прямо к 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 пользователю), если это не сработало.

Ответ №2:

Строка request id is PrinterQueue-68 (1 file(s)) — это то, что lp команда выводит, а не то, что она возвращает.

Если lp команда завершится неудачно, она вернет ненулевой статус завершения. (Он также должен выводить сообщение об ошибке, но эти сообщения не обязательно документированы и могут меняться от одной версии к другой.)

Насколько я понимаю, вы можете запросить значение $? после вызова команды с помощью обратных ссылок. Если команда выполнена успешно, $? должно быть 0. В случае сбоя он будет иметь некоторое ненулевое значение.

В комментарии @muistoosh short предлагает использовать open3 ; это, вероятно, более надежно и гибко, чем использование обратных ссылок.