Seite 1 von 1
Problem mit os.popen
Verfasst: Mittwoch 25. Februar 2009, 14:05
von SteeWeeDee
Hallo!
Habe folgendes Problem mit os.popen: Wenn ich es verwende bekomme ich die Fehlermeldung Schreibfehler: Broken Pipe.
Z.B.
bekomme ich beim ausführen den Fehler:
ls: Schreibfehler: Broken Pipe.
Jemand eine Ahnung was man dagegen tun kann?
Verfasst: Mittwoch 25. Februar 2009, 14:10
von Rebecca
Ich kann den Fehler nicht reproduzieren. Ab Python 2.4 nutzt man aber eh subprocess fuer sowas.
Verfasst: Mittwoch 25. Februar 2009, 14:46
von kbr
Rebecca hat geschrieben:Ich kann den Fehler nicht reproduzieren. Ab Python 2.4 nutzt man aber eh subprocess fuer sowas.
Vielleicht noch als Ergänzung: die popen-Funktionen sind seit Python 2.6 deprecated und in Python 3.0 nicht mehr verfügbar.
Verfasst: Mittwoch 25. Februar 2009, 15:18
von SteeWeeDee
Gut habe es jetzt mit subprocess gemacht:
Ich möchte die Logdateien die in einem Verzeichnis sind mit ls auflisten:
Code: Alles auswählen
from subprocess import *
temppath = os.path.abspath(".")
path = os.path.join(temppath,r"Logfiles") # Pfad in der die Logs liegen
p = Popen(["ls " +path], stdout=PIPE)
out = p.communicate()[0]
Dann kommt die Fehlermeldung (dateien ist die Methode zum auflisten):
File "/home/stephan/gui.py", line 270, in dateien
p = POPEN(["ls " +path], stdout=PIPE)
File /usr/lib/python2.5/subprocess.py, in line 594, in __init__ errread, errwrite)
File /usr/lib/python2.5/subprocess.py, in line 1147, in _execute_child raise child_exception)
Verfasst: Mittwoch 25. Februar 2009, 15:27
von DasIch
Sternchen-Importe sind böse.
Außerdem nutzt du Python und nicht die bash, ``subprocess`` sollte man vermeiden, trotzdem soll man eine Liste mit Argumenten übergeben keine Liste mit dem Befehl als string. Wie auch immer, nutze ``os.listdir`` um eine Liste aller Dateien und Ordner in einem Verzeichnis zu bekommen.
Verfasst: Mittwoch 25. Februar 2009, 16:18
von SteeWeeDee
funktioniert und gibt mir das Verzeichnis aus (leider nur das, worin das Programm liegt)
aber
kommt wiederum die Fehlermeldung, dich ich in dem Post um 16:18 geschrieben habe.
Gibt es noch eine andere Möglichkeit eine Ausgabe in eine Variable zu schreiben außer popen und subprocess? Oder was mache ich denn bei der Benutzung falsch?
Verfasst: Mittwoch 25. Februar 2009, 16:20
von helduel
Cool.
Code: Alles auswählen
>>> import os
>>> os.listdir
<built-in function listdir>
Gruß,
Manuel
Verfasst: Mittwoch 25. Februar 2009, 21:16
von BlackJack
@SteeWeeDee: In beiden Fällen versuchst Du ein Programm auszuführen, das es nicht gibt.
Auf Deinem Rechner wird es weder das Programm ``'ls ' + path`` geben, noch das Programm 'os.listdir'. Das Argument von `subprocess.Popen` muss eine Liste bzw. Sequenz sein, mit dem Programmnamen, und nur dem, gefolgt von allen Argumenten als einzelne Elemente. Also das was das aufgerufene Programm als `sys.argv` bekommt.