subprocess.check_output() und subprocess.CalledProcessError
Verfasst: Freitag 8. Mai 2015, 07:21
Hallo zusammen,
ich habe einen Cron-Job, der täglich eine *.odt-Datei generiert und diese mit libreoffice in ein pdf konvertiert. Die pdf-Datei des Vortages wird dabei jeweils überschrieben.
Mein Problem ist, dass das manchmal fehlschlägt und das Log dazu nicht sehr aufschlußreich ist. Der Code zur Konvertierung sieht so aus:
Wenn die Konvertierung fehlschlägt, steht im Log folgendes:
Benutze ich subprocess.check_output() bzw. subprocess.CalledProcessError falsch oder muss ich mich einfach damit abfinden, dass libreoffice nicht sehr gesprächig ist?
Ein Flag scheint es jedenfalls nicht zu geben.
Der Vollständigkeit halber:
P.S.: Mir geht es eher darum, ob ich die Doku des subprocess-Moduls richtig verstanden habe, als um die Lösung des konkreten Problems. Lösungsvorschläge dafür nehme ich aber auch gern. Deshalb noch der Hinweis, dass die Rechte sowohl für das Output-Verzeichnis als auch die zu überschreibende Datei auf 777 stehen und der User, unter dem der Cron-Job läuft auch owner der Datei ist.
ich habe einen Cron-Job, der täglich eine *.odt-Datei generiert und diese mit libreoffice in ein pdf konvertiert. Die pdf-Datei des Vortages wird dabei jeweils überschrieben.
Mein Problem ist, dass das manchmal fehlschlägt und das Log dazu nicht sehr aufschlußreich ist. Der Code zur Konvertierung sieht so aus:
Code: Alles auswählen
try:
subprocess.check_output(['libreoffice', '--headless', '-convert-to',
'pdf', '--outdir', target_dir, source])
logger.info('%s successfully converted to pdf in %s',
source, target_dir)
except subprocess.CalledProcessError as e:
logger.error('pdf conversion failed: %s', e)
logger.error('output: %s', e.output)Code: Alles auswählen
2015-05-08 06:40:11,706: [ERROR] converter:28 pdf conversion failed: Command '['libreoffice', '--headless', '-convert-to', 'pdf', '--outdir', u'/path/to/outdir', u'/path/to/source_file.odt']' returned non-zero exit status 1
2015-05-08 06:40:11,706: [ERROR] converter:29 output: Ein
Code: Alles auswählen
--verboseDer Vollständigkeit halber:
Code: Alles auswählen
$ python --version
Python 2.7.3