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
Ausgabe von os.system speichern?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wie wäre es damit:
Und generell: subprocess.Popen ist os.popen() vorzuziehen. Wobei es hier eben komplett überflüssig ist!
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/'
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
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.
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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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.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.
Dass er schon wieder mit os.popen() rumgespielt hat, ok; aber das ist hierfür ja eh irrelevant gewesen!
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
- Schaf220
- User
- Beiträge: 113
- Registriert: Montag 11. August 2008, 16:00
- Wohnort: Bremen
- Kontaktdaten:
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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ähh... hast Du Dir meine Antwort mal angeguckt? Dazu braucht es doch gar kein Popen-Kram!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.
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
- Schaf220
- User
- Beiträge: 113
- Registriert: Montag 11. August 2008, 16:00
- Wohnort: Bremen
- Kontaktdaten:
Leider klappt das nicht so richtig bei mir..., Was bedeutet dieses IN[48]?Hyperion hat geschrieben:Wie wäre es damit:Und generell: subprocess.Popen ist os.popen() vorzuziehen. Wobei es hier eben komplett überflüssig ist!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/'
*g. Jetzt fühle ich mich verstanden .Hyperion hat geschrieben:Ähh... hast Du Dir meine Antwort mal angeguckt? Dazu braucht es doch gar kein Popen-Kram!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.
@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/")
- Schaf220
- User
- Beiträge: 113
- Registriert: Montag 11. August 2008, 16:00
- Wohnort: Bremen
- Kontaktdaten:
//edit: Diese Ins und Outs sowie Zeilennummern kannst du weglassen. Der Befehl lautet also:
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 ?
Code: Alles auswählen
os.path.expandvars("%appdata%/Local/Activision/")
PS: kann das an meiner Pythonversion(2.5) liegen ?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Vergiss das. Das ist nur die Ausgabe der ipython-Shell! Alles nach dem ":" ist relevant!Schaf220 hat geschrieben:Leider klappt das nicht so richtig bei mir..., Was bedeutet dieses IN[48]?Hyperion hat geschrieben:Wie wäre es damit:Und generell: subprocess.Popen ist os.popen() vorzuziehen. Wobei es hier eben komplett überflüssig ist!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/'
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
- Schaf220
- User
- Beiträge: 113
- Registriert: Montag 11. August 2008, 16:00
- Wohnort: Bremen
- Kontaktdaten:
Hyperion hat geschrieben:Vergiss das. Das ist nur die Ausgabe der ipython-Shell! Alles nach dem ":" ist relevant!Schaf220 hat geschrieben:Leider klappt das nicht so richtig bei mir..., Was bedeutet dieses IN[48]?Hyperion hat geschrieben:Wie wäre es damit:Und generell: subprocess.Popen ist os.popen() vorzuziehen. Wobei es hier eben komplett überflüssig ist!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/'
OK, mit der python-Shell gehts aber wenn ich die Zeile in Eclipes starte wird nichts zuruck gegeben.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Dann tu's nichtSchaf220 hat geschrieben: OK, mit der python-Shell gehts aber wenn ich die Zeile in Eclipes starte wird nichts zuruck gegeben.
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
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
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
the more they change the more they stay the same
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
So meinte ich das nicht und du hast natürlich recht .lunar hat geschrieben:Das klingt jetzt so, als sollte man "call" gar nicht einsetzen, was nicht stimmt.
Waas ich noch vergessen habe, call blockt und Popen nicht.
the more they change the more they stay the same