Depois de enviar o documento, verifique o cupsLastErrorString
. Se é nulo, você deve ser bom. Além disso, a maioria das funções deve informar se ele falhou, pois elas retornam um inteiro.
EDIT: Esqueci de deixar claro que estou usando python e pycups. O código é python, mas eu não deveria ter pensado que era o suficiente.
Eu vasculhei a documentação das copas algumas vezes e não consegui encontrar nada para fazer isso. Existe alguma mensagem que seja retornada em uma impressão bem-sucedida que possa ser capturada?
Por exemplo, neste código:
import os
import cups
conn = cups.Connection()
f = open('testreceipt.txt', 'w')
f.write('something')
f.close()
printer_returns = conn.printFile('EPSON_TM-P2.01', 'testreceipt.txt', 'test', {})
print printer_returns
Tudo o que a impressora_retorna é atribuída parece ser o ID da tarefa de impressão (208,209, ..., n). Isso ocorre se uma impressora está conectada ou não e, portanto, não pode ser invocada para confirmação.
Nesse caso, a impressora de destino é uma impressora de recibos conectada por um cabo serial > usb em um raspberry pi em execução raspberry.
Eu considerei monitorar o arquivo de log cups para impressões bem-sucedidas, mas isso parece ser um mau caminho para isso.
Não sei ao certo para onde encontrar uma solução, por isso, se alguém tiver pensamentos, compartilhe-os.
Depois de enviar o documento, verifique o cupsLastErrorString
. Se é nulo, você deve ser bom. Além disso, a maioria das funções deve informar se ele falhou, pois elas retornam um inteiro.
Estou usando o getJobs para verificar se os trabalhos foram enviados para a impressora.
printid = conn.printFile('EPSON_TM-P2.01', 'testreceipt.txt', 'test', {})
while conn.getJobs().get(printid, None) is not None:
time.sleep(1)
Isso é o que eu finalmente acabei fazendo. A função printFile () retorna o id de impressão que os cups usam, enquanto a fila de impressão atual através da linha de comando é acessível via lpstat. Eu acho que é um pouco confuso, mas é bom o suficiente para as minhas necessidades agora. Obrigado pela ajuda a todos, todos vocês me cutucaram na direção apropriada.
20 printid = conn.printFile('EPSON_TM-P2.01', 'testreceipt.txt', 'test', {})
21
22 stop = 0
23 TIMEOUT = 60
24
25 while str(subprocess.check_output(["lpstat"])).find(str(printid)) > 0 and stop < TIMEOUT:
26 stop+= 1
27 time.sleep(1)
28 if stop < TIMEOUT:
29 print "PRINT SUCCESS"
30 else:
31 print "PRINT FAILURE"
Acredito que o equivalente em pycups é a classe IPPError (observe o código de exemplo try / except
) , pois as funções cupsLastError*
em cups
retornam os códigos de erro do IPP.
A verificação do código de status de um subprocesso também deve funcionar, mas parece uma sobrecarga desnecessária se pycups
fornecer o código diretamente.
Você pode esperar até
conn.getJobAttributes(printer_returns)["job-state"]
é igual a 9 (IPP_JOB_COMPLETED)
Tags python debian printing cups raspberry-pi