次の呼び出しで出力する 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
;の使用を提案しています。これは、バックティックを使用するよりもおそらく堅牢で柔軟性があります。