CUPS - verifique se a impressão foi bem-sucedida (em python ou no sistema)

2

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.

    
por Jeff H. 29.01.2013 / 03:17

5 respostas

1

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.

Encontrado aqui

    
por 29.01.2013 / 05:37
1

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)
    
por 11.06.2014 / 15:15
0

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"
    
por 04.02.2013 / 23:40
0

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.

    
por 05.05.2013 / 18:38
0

Você pode esperar até

conn.getJobAttributes(printer_returns)["job-state"]

é igual a 9 (IPP_JOB_COMPLETED)

    
por 19.02.2015 / 19:09