befehl auf kommandozeile ausführen und rückmeldung abfragen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mosi
User
Beiträge: 8
Registriert: Samstag 27. Dezember 2008, 20:53

Ich habe das Problem, dass ich aus einem Pythonprogramm heraus einen Kommandozeilenaufruf starten möchte und ich aber auch die antwort der kommandozeile wieder in meinem Pythonprgramm brauche.
Wie kann ich das realiesieren?
Erste Experimente ergaben folgende Lösung:

Code: Alles auswählen

a = os.popen("ls")
    print a
(anzeigen des verzeichnisinhalts)
aber anstatt, dass ich jetzt den verzeichnisinhalt zu lesen bekomme kommt folgendes:
<open file 'ls', mode 'r' at 0x9078a40>
wo sitzt da der Wurm?
Vielen Dank im Voraus!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das "Problem" ist, dass ``os.popen`` wie ``popen`` der cstdlib einen Filedescriptor zurueckgibt.

``a.readlines()`` gibt dir den Inhalt.

Aber bevor du jetzt damit losrennst: Vergiss ``os.popen`` und nutze ``subprocess.Popen`` (und lies die entsprechende Doku)
mosi
User
Beiträge: 8
Registriert: Samstag 27. Dezember 2008, 20:53

vielen dank!!
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Und bevor du auf externe Programme zurückgreifst, möchtest du vielleicht Python-Boardmittel benutzen. Wenn es dir z.B. um die Dateinamen im aktuellen Verzeichnis geht, kann man das besser so machen:

Code: Alles auswählen

import os
os.listdir('.')
bzw. für eine exakte Nachbildung der Ausgabe von `ls`:

Code: Alles auswählen

sorted(os.listdir('.'))
mosi
User
Beiträge: 8
Registriert: Samstag 27. Dezember 2008, 20:53

vielen dank aber das war nur ein beispiel
das soll mal ein compileraufruf für einen pascalcompiler werden und den hat python leider nicht an bord :lol:
Antworten