Seite 1 von 1

Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 12:26
von Schaf220
Hallo liebe Community,

ich habe da nochmal eine Frage, also ich habe einen Pfad der sieht so aus: "%appdata%/Local/Activision/".
Da ich den genauen Pfand nicht kenne muss ich ihn erstmal herausfinden. Das habe ich mit os.system("echo %appdata%/Local/Activision/") gemacht.
Das Ergebnis ist das Richtige. Ich sehe den richtigen Pfand aber der Rückgabewert ist "0" und ich kann damit nicht arbeiten, weil ich ja den kompletten Pfad benötige. kann man das Ergebnis speichern?
Ich habe mit mal "subprocess" angesehen, aber ich werden daraus nicht schlau...

Mit freundlichen Grüßen
Schaf220

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 12:29
von EyDu
Hallo.

Statt os.system möchtest du das subproces-Modul verwenden.

Edit: Es existiert dazu gerade noch ein nahezu identischer Thread.

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 12:30
von Schaf220
Mir wäre das egal, Hauptsache es würde mit einer der beiden Möglichkeiten funktionieren.

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 12:35
von Hyperion
Wie wäre es damit:

Code: Alles auswählen

In [48]: os.path.expandvars("%appdata%/Local/Activision/")
Out[48]: 'C:\\Dokumente und Einstellungen\\MECL User 1\\Anwendungsdaten/Local/Ac
tivision/'
Und generell: subprocess.Popen ist os.popen() vorzuziehen. Wobei es hier eben komplett überflüssig ist!

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 12:39
von Barabbas
Wurde ihm alles schon gesagt: http://www.python-forum.de/viewtopic.php?f=1&t=23502

Aber der Mensch liest sich Tipps nicht durch und ist offensichtlich auch zu faul, mal auf einen Link zu klicken. Ärgert mich - sehr. Pure Zeitverschwendung, da hilfsbereit sein zu wollen.

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 12:47
von Hyperion
Barabbas hat geschrieben:Wurde ihm alles schon gesagt, wie EyDu schon angemerkt hat: http://www.python-forum.de/viewtopic.php?f=1&t=23502

Aber der Mensch liest sich Tipps nicht durch und ist offensichtlich auch zu faul, mal auf einen Link zu klicken. Ärgert mich - sehr. Pure Zeitverschwendung, da hilfsbereit sein zu wollen.
Also diese Frage wurde dort weder gestellt nocht beantwortet! Ich finde da kann man ruhig mal einen kurzen Tipp geben - zumal konkret nach Auflösung dieses einen Problems gefragt wurde. Ich persönlich kenne auch nicht alle Features der Standard-Lib und bin dann durchaus für so etwas dankbar.

Dass er schon wieder mit os.popen() rumgespielt hat, ok; aber das ist hierfür ja eh irrelevant gewesen!

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 12:49
von Schaf220
Tut mir leid, das ich euch so zur Last falle, aber ich verstehe subprocess einfach nicht. Es wird mir auch nicht klarer wenn ich mir die Doku dazu durchlese. Ich konnte deine Tipps Barabbas, ja auch gut gebrauchen, aber ich versteh nicht wie das "Popen" funktionieren soll. Es wird eine Datei verlangt, dabei frage ich mich wofür, mir werden die Bedeutungen der Parameter nicht klar.

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 12:54
von Hyperion
Schaf220 hat geschrieben:Tut mir leid, das ich euch so zur Last falle, aber ich verstehe subprocess einfach nicht. Es wird mir auch nicht klarer wenn ich mir die Doku dazu durchlese. Ich konnte deine Tipps Barabbas, ja auch gut gebrauchen, aber ich versteh nicht wie das "Popen" funktionieren soll. Es wird eine Datei verlangt, dabei frage ich mich wofür, mir werden die Bedeutungen der Parameter nicht klar.
Ähh... hast Du Dir meine Antwort mal angeguckt? Dazu braucht es doch gar kein Popen-Kram!

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 13:06
von Schaf220
Hyperion hat geschrieben:Wie wäre es damit:

Code: Alles auswählen

In [48]: os.path.expandvars("%appdata%/Local/Activision/")
Out[48]: 'C:\\Dokumente und Einstellungen\\MECL User 1\\Anwendungsdaten/Local/Ac
tivision/'
Und generell: subprocess.Popen ist os.popen() vorzuziehen. Wobei es hier eben komplett überflüssig ist!
Leider klappt das nicht so richtig bei mir..., Was bedeutet dieses IN[48]?

Re: [geschlossen]Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 13:10
von Barabbas
Hyperion hat geschrieben:
Schaf220 hat geschrieben:Tut mir leid, das ich euch so zur Last falle, aber ich verstehe subprocess einfach nicht. Es wird mir auch nicht klarer wenn ich mir die Doku dazu durchlese. Ich konnte deine Tipps Barabbas, ja auch gut gebrauchen, aber ich versteh nicht wie das "Popen" funktionieren soll. Es wird eine Datei verlangt, dabei frage ich mich wofür, mir werden die Bedeutungen der Parameter nicht klar.
Ähh... hast Du Dir meine Antwort mal angeguckt? Dazu braucht es doch gar kein Popen-Kram!
*g. Jetzt fühle ich mich verstanden ;).

@Schaf220: Du fällst uns nicht zur Last - ich habe nur den Eindruck, dass du dir nicht die Zeit nimmst, unsere (oftmals :)) guten und überlegten Hinweise auch zu befolgen. Nachfragen sind immer gerne gesehen - aber sie sollten schon zeigen, dass sich der Fragesteller die Tipps zu Herzen genommen hat. Und wenn du hier wieder mit os.system() ankommst, dann hat man etwas den Eindruck, man redet gegen Wände, was natürlich etwas frustriert.

Ich weiß nicht, wie man es erklären soll: Aber "externe" Befehle aufzurufen ist mit Python wirklich eher ein Ausnahmefall. Das benötigst du nur, wenn du ganz konkrete Programme fernsteuern oder starten möchtest. Alles was irgendwie zum Betriebsystemalltag gehört, kann Python i.d.R. auch ohne os.system() & Co (siehe Beitrag von Hyperion).

So: Viel Spaß noch und entschuldige mein Gemotze.

//edit: Diese Ins und Outs sowie Zeilennummern kannst du weglassen. Der Befehl lautet also:

Code: Alles auswählen

os.path.expandvars("%appdata%/Local/Activision/")

Re: [geschlossen]Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 13:21
von Schaf220
//edit: Diese Ins und Outs sowie Zeilennummern kannst du weglassen. Der Befehl lautet also:

Code: Alles auswählen

os.path.expandvars("%appdata%/Local/Activision/")
Ok ich habe nun alles verstanden, aber leider gibt der mir das Selbe ("%appdata%/Local/Activision/") wieder aus.

PS: kann das an meiner Pythonversion(2.5) liegen ?

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 13:24
von Hyperion
Schaf220 hat geschrieben:
Hyperion hat geschrieben:Wie wäre es damit:

Code: Alles auswählen

In [48]: os.path.expandvars("%appdata%/Local/Activision/")
Out[48]: 'C:\\Dokumente und Einstellungen\\MECL User 1\\Anwendungsdaten/Local/Ac
tivision/'
Und generell: subprocess.Popen ist os.popen() vorzuziehen. Wobei es hier eben komplett überflüssig ist!
Leider klappt das nicht so richtig bei mir..., Was bedeutet dieses IN[48]?
Vergiss das. Das ist nur die Ausgabe der ipython-Shell! Alles nach dem ":" ist relevant!

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 13:29
von Schaf220
Hyperion hat geschrieben:
Schaf220 hat geschrieben:
Hyperion hat geschrieben:Wie wäre es damit:

Code: Alles auswählen

In [48]: os.path.expandvars("%appdata%/Local/Activision/")
Out[48]: 'C:\\Dokumente und Einstellungen\\MECL User 1\\Anwendungsdaten/Local/Ac
tivision/'
Und generell: subprocess.Popen ist os.popen() vorzuziehen. Wobei es hier eben komplett überflüssig ist!
Leider klappt das nicht so richtig bei mir..., Was bedeutet dieses IN[48]?
Vergiss das. Das ist nur die Ausgabe der ipython-Shell! Alles nach dem ":" ist relevant!



OK, mit der python-Shell gehts aber wenn ich die Zeile in Eclipes starte wird nichts zuruck gegeben.

Re: Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 13:34
von Hyperion
Schaf220 hat geschrieben: OK, mit der python-Shell gehts aber wenn ich die Zeile in Eclipes starte wird nichts zuruck gegeben.
Dann tu's nicht ;-)

SCNR.

Kann ich mir auf die Schnelle nicht erklären.

Oder aber kann es sein, dass du das nicht printest? Vermutlich hat PyDev keine echte Python-Shell, sondern "nur" ein Standard- und Error-Out. Man muss den Rückgabewert schon explizit printen, damit man ihn "sieht".

Das ist übrigens einer der Gründe, weswegen ein Anfänger KEINE IDE verwenden sollte - imho zumindest :-)

Re: [geschlossen]Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 13:41
von Schaf220
Ok, es lag an der Interpreterversion 2.5. Mit Verion 2.6 geht alles wunderbar! Danke nochmal und Entschuldigung für alle Unannehmlichkeiten.

Mit freundlichen Grüßen
Schaf220

Re: [geschlossen]Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 15:22
von Dav1d
Nochmal ein Nachtrag zu os.system und subprocess: os.system liefert den return-Code, da der Befehl erfolgreich ausgeführt wurde ist er 0 (os.popen* macht das anders). Man sollte allerdings anstatt os.system/os.popen* lieber das subprocess Modul nutzen (welches nun wirklich nicht schwer zu verstehen ist, wenn man sich damit befasst). Um an den returncode zu kommen wie bei os.system nutzt man am Besten subprocess.call (allerdings auch nicht optimal, siehe warning), man kann auch eine Popen Objekt nutzen um an den returncode zu kommen (p=Popen([foo, bar]),p.returncode), wenn man die Ausgabe von stdout/stderr braucht, benutzt man am Besten ein Popen Objekt mit "communicate"

Code: Alles auswählen

p = Popen([foo, bar])
stdoutdata, stderrdata = p.communicate(None) # anstatt None, kann man dem Prozess noch was in stdin "mitgeben"
print stdoutdata

Re: [geschlossen]Ausgabe von os.system speichern?

Verfasst: Montag 19. Juli 2010, 16:56
von lunar
Das klingt jetzt so, als sollte man "call" gar nicht einsetzen, was nicht stimmt. "call" ist optimal, wenn man sie richtig einsetzt. Und jede Funktion ist nicht „optimal“, wenn man sie nicht richtig einsetzt ;)

Re: Ausgabe von os.system speichern?

Verfasst: Dienstag 20. Juli 2010, 12:36
von Dav1d
lunar hat geschrieben:Das klingt jetzt so, als sollte man "call" gar nicht einsetzen, was nicht stimmt.
So meinte ich das nicht und du hast natürlich recht ;).

Waas ich noch vergessen habe, call blockt und Popen nicht.