@ChristophS: `subprocess` sollte man nicht mit `sb` abkürzen.
Statt die Datei zu lesen und den Inhalt in `stdin` vom externen Prozess zu schreiben, kann man auch einfach die Datei öffnen und als `stdin` an den externen Prozess übergeben.
Die ``with``-Anweisung macht spart eine Zeile, wenn man ``try``/``finally`` verwendet hätte, sogar noch mehr.
Der Code wartet gar nicht auf das Ende des externen Prozesses. Es kann also passieren das der externe Kindprozess beendet wird weil der Elternprozess am Ende ankommt, bevor der Kindprozess komplett durchgelaufen ist.
Statt ein `Popen()`-Exemplar zu erzeugen und da dann `wait()` drauf aufzurufen, kann man auch einfach `subprocess.run()` verwenden. Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import subprocess
def main():
with open('/Volumes/Projects/TempControl/TestFile.html', 'rb') as file:
subprocess.run(['/usr/bin/lpr'], stdin=file)
if __name__ == '__main__':
main()
PDF-Dateien sollte CUPS eigentlich drucken können. HTML nur wenn ein entsprechender Filter installiert/konfiguriert wurde, denn Standard ist das hier:
Also eine Umwandlung von Text nach PDF, das dann gedruckt werden kann. Wobei man wenn man die Daten direkt in ``lpr`` hinein piped eventuell noch per Option verraten muss was der MIME-Typ der Daten ist, nur für den Fall das CUPS da falsch rät.
Im Netz habe ich auch keine Dokumentation für `pycups` gefunden, aber das Modul selbst enthält Docstrings, man kann da also in einer interaktiven Python-Shell mit `help()` (oder beispielsweise ``?`` in IPython) oder mit ``pydoc`` heran kommen.