Что возвращает lp от CUPS? - PullRequest
       16

Что возвращает lp от CUPS?

0 голосов
/ 11 ноября 2011

Я пишу скрипт ruby, который печатает по телефону:

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

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

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

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Позвольте мне немного подробнее остановиться на моем комментарии.

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

0 голосов
/ 11 ноября 2011

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

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

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

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

...