#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
; это, вероятно, более надежно и гибко, чем использование обратных ссылок.