Seite 1 von 1
Konsolenausgabe von externen Programm verwenden
Verfasst: Samstag 10. Juli 2010, 12:17
von Francesco
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?
Re: Konsolenausgabe von externen Programm verwenden
Verfasst: Samstag 10. Juli 2010, 12:27
von Dav1d
Ja das geht, schau dir mal das subprocess Modul an (Popen und PIPE)
Re: Konsolenausgabe von externen Programm verwenden
Verfasst: Samstag 10. Juli 2010, 13:00
von Francesco
Dav1d hat geschrieben:Ja das geht, schau dir mal das subprocess Modul an (Popen und PIPE)
Sehr gut, danke für den Hinweis.
Re: Konsolenausgabe von externen Programm verwenden
Verfasst: Montag 19. Juli 2010, 12:07
von Francesco
Francesco hat geschrieben:Dav1d hat geschrieben:Ja das geht, schau dir mal das subprocess Modul an (Popen und PIPE)
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
Re: Konsolenausgabe von externen Programm verwenden
Verfasst: Montag 19. Juli 2010, 12:26
von Hyperion
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
Wieso denn nicht mit subprocess, was Dir empfohlen wurde?
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
Das shell=True braucht es hier nur wegen der Windows-Shell; sollte unter Linux (ggf. auch Cygwin) unnötig sein.
Re: Konsolenausgabe von externen Programm verwenden
Verfasst: Montag 19. Juli 2010, 13:15
von Francesco
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
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
Re: Konsolenausgabe von externen Programm verwenden
Verfasst: Montag 19. Juli 2010, 13:22
von Barabbas
Francesco hat geschrieben:BTW:
das Shell braucht man hier (Ubuntu) anscheinend doch ...
Ne, braucht man nicht: Der Befehl "ls -la /O" such nach einem Verzeichnis "/O" - und das existiert halt nicht.
Re: Konsolenausgabe von externen Programm verwenden
Verfasst: Montag 19. Juli 2010, 13:26
von Hyperion
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

Re: Konsolenausgabe von externen Programm verwenden
Verfasst: Montag 19. Juli 2010, 15:16
von Francesco
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

Ah ja, hatte ich etwas zu gedankenlos kopiert und geändert.
Funktioniert:
Code: Alles auswählen
stdout, stderr = Popen(["ls", "-a"], stdout=PIPE, stderr=PIPE).communicate()