
Am 25.05.2017 um 17:19 schrieb Ulrich Goebel:
ich möchte mit
error=os.system("latex ...") LaTeX oder andere Befehle aufrufen. Im
Falle, dass der Befehl mit einem Code != 0 (error != 0) endet, möchte ich gerne die Ausgaben des Befehls sehen, also das Ergebnis von
log=os.popen("latex ...")
Geht das?
error=os.system("latex ... 2> /tmp/log") Hermann der das so machen würde -- http://www.hermann-riemann.de

On 25.05.2017 17:40, Hermann Riemann wrote:
error=os.system("latex ... 2> /tmp/log")
Hermann der das so machen würde
Sieht durchaus einfacher aus, ist aber nicht ganz unsicher, wenn's um das Thema Quoting von Parametern geht. *Hier auch noch zum Nachlesen:* https://docs.python.org/3.6/library/subprocess.html The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. This module *intends to replace* several older modules and functions: os.system os.spawn* *Überspitzt ausgedrückt:* subprocess ist der neue heiße Scheiß und os.system/os.popen der Schnee von gestern. ;-) Daher empfehle auch ich, wie Volker: try: output = subprocess.check_output(.......) except subprocess.CalledProcessError as exc: # hier geht's zur Fehlerbehandlung, falls latex streikt print(exc.output) else: # alles gut print(output) Das funktioniert sowohl unter Python 2 als auch Python 3. Viel Erfolg damit. :) Grüße, Sven

On 2017-05-25 19:06, Sven R. Kunze wrote:> On 25.05.2017 17:40, Hermann Riemann wrote:
error=os.system("latex ... 2> /tmp/log")
Hermann der das so machen würde
Sieht durchaus einfacher aus, ist aber nicht ganz unsicher, wenn's um das Thema Quoting von Parametern geht.
*Hier auch noch zum Nachlesen:* https://docs.python.org/3.6/library/subprocess.html
`subprocess` ist nicht nur sicherer, sondern auch ganz allgemein robuster. Es wird zwar immer hervorgehoben, dass mit dem Modul keine Angriffe mit speziellen Dateinamen möglich sind (was stimmt), aber das Modul hilft auch, wenn zum Beispiel Dateinamen ganz ohne böse Absicht Leerzeichen enthalten oder Zeichen, die sonst von der Shell interpretiert werden würden. Beispiel: dateiname = "dies & das.txt" # von irgendwoher ausgabe = subprocess.check_output(["du", "--human-readable", "--summarize", dateiname]) Viele Grüße Stefan

Ich hab letztens noch EasyProcess kennen gelernt. https://pypi.python.org/pypi/EasyProcess Viele Grüße Reimar 2017-05-25 20:01 GMT+02:00 Stefan Schwarzer <sschwarzer@sschwarzer.net>:
On 2017-05-25 19:06, Sven R. Kunze wrote:> On 25.05.2017 17:40, Hermann Riemann wrote:
error=os.system("latex ... 2> /tmp/log")
Hermann der das so machen würde
Sieht durchaus einfacher aus, ist aber nicht ganz unsicher, wenn's um das Thema Quoting von Parametern geht.
*Hier auch noch zum Nachlesen:* https://docs.python.org/3.6/library/subprocess.html
`subprocess` ist nicht nur sicherer, sondern auch ganz allgemein robuster.
Es wird zwar immer hervorgehoben, dass mit dem Modul keine Angriffe mit speziellen Dateinamen möglich sind (was stimmt), aber das Modul hilft auch, wenn zum Beispiel Dateinamen ganz ohne böse Absicht Leerzeichen enthalten oder Zeichen, die sonst von der Shell interpretiert werden würden.
Beispiel:
dateiname = "dies & das.txt" # von irgendwoher
ausgabe = subprocess.check_output(["du", "--human-readable", "--summarize", dateiname])
Viele Grüße Stefan _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
participants (4)
-
Hermann Riemann
-
Reimar Bauer
-
Stefan Schwarzer
-
Sven R. Kunze