hallo,
angenommen ich möchte in meinem Python programm ein externes programm (wie zb locate) mit os.system oder subprozess, ... aufrufen und an die Konsolenausgabe herankommen.
Geht das irgendwie?
Oder muss ich die Ausgabe in ein temporäres file umleiten das ich dann von python wieder einlese?
Konsolenausgabe von externen Programm verwenden
Ja das geht, schau dir mal das subprocess Modul an (Popen und PIPE)
the more they change the more they stay the same
Vielleicht interessierts ja noch wen:Francesco hat geschrieben:Sehr gut, danke für den Hinweis.Dav1d hat geschrieben:Ja das geht, schau dir mal das subprocess Modul an (Popen und PIPE)
Bsp:
Code: Alles auswählen
import os
stdout_handle = os.popen("ls -l", "r")
consoleout = stdout_handle.read()
print consoleout
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wieso denn nicht mit subprocess, was Dir empfohlen wurde?Francesco hat geschrieben: Sehr gut, danke für den Hinweis.
Vielleicht interessierts ja noch wen:
Bsp:Code: Alles auswählen
import os stdout_handle = os.popen("ls -l", "r") consoleout = stdout_handle.read() print consoleout
Code: Alles auswählen
In [35]: from subprocess import Popen, PIPE
In [36]: stdout, stderr = Popen(["dir", "/O"], shell=True, stdout=PIPE, stderr=P
IPE).communicate()
In [37]: print stdout
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Hab ja nicht mit Absicht nicht an die Tips gehalten... Ja, man sollte die neueren Module wie subprocess verwenden, ok.
BTW:
das Shell braucht man hier (Ubuntu) anscheinend doch
BTW:
das Shell braucht man hier (Ubuntu) anscheinend doch
Code: Alles auswählen
stdout, stderr = Popen(["ls -a", "/O"], shell=True, stdout=PIPE, stderr=PIPE).communicate()
stdout, stderr = Popen(["ls -a", "/O"], stdout=PIPE, stderr=PIPE).communicate()
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/lib/python2.6/subprocess.py", line 621, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1126, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das "/O" ist ein Parameter des "dir"-Kommandos der Windows Shell. Das diente nur zur Demonstration... so viel Abstraktion hätte ich denn doch mal erwartet
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Ah ja, hatte ich etwas zu gedankenlos kopiert und geändert.Hyperion hat geschrieben:Das "/O" ist ein Parameter des "dir"-Kommandos der Windows Shell. Das diente nur zur Demonstration... so viel Abstraktion hätte ich denn doch mal erwartet
Funktioniert:
Code: Alles auswählen
stdout, stderr = Popen(["ls", "-a"], stdout=PIPE, stderr=PIPE).communicate()