Seite 1 von 1

system() in Python?

Verfasst: Donnerstag 1. Februar 2007, 14:38
von Klip
Hallo zusammen!

Die Frage ist mir etwas peinlich, aber ich hätte gerne gewusst, wie man in Python auf andere Programme zugreifen kann. In Ruby oder C++ geht das in etwa so:

Code: Alles auswählen

system("wget http://blablub.de/blablub.txt")
wget ist jetzt nur ein Beispiel für die Benutzung der Funktion system().

Ich vermute, bei Python hängt eine solche Funktion irgendwo im os-Modul. Kann mir jemand auf die Sprünge helfen?

Verfasst: Donnerstag 1. Februar 2007, 14:51
von EnTeQuAk
Jap richtig geraten ;) Es verbirgt sich im Modul 'os'.

Beispiel

Code: Alles auswählen

import os

# warum auch immer...
if sys.argv[1] == 'vater_datei':
    os.system('python vater.py')
Ist zwar nen blöödes Beispiel... aber näheres findet man unter
http://docs.python.org/lib/module-os.html

Um dateien auszuführen gibt es z.B.

Code: Alles auswählen

os.startfile(dateiname)
oder (ungetestet) um auf die Ausgaben der Konsole reagieren zu können -- evtl. sie auf eine GUI umleiten zu können (weiß net, ob das so geht)
gäbe es 'os.popen' -- ... -- aber da kenn ich mich nicht so aus

MfG EnTeQuAk

Verfasst: Donnerstag 1. Februar 2007, 14:52
von skypa
Schau mal hier hinein:

http://docs.python.org/lib/os-process.html

Dort findest du deine system()-Funktion, bzw auch noch anderes (vlt) nützliches...

Hat sich schon mal jemand mit Hooking unter Python beschäftigt?

Edit: Da war ich wohl ein Sekündchen zu langsam ;)

Verfasst: Donnerstag 1. Februar 2007, 14:54
von Klip
Danke für die Erklärung und die Links :)

Liebe Grüße
klip

Verfasst: Donnerstag 1. Februar 2007, 15:25
von sape
``subprocess``

[wiki]Neue Features#Subprocess[/wiki]
Dadurch sollen os.system(), os.popen() und die Funktionen des popen2 Moduls vereinheitlicht werden, so dass man in Zukunft nur noch das subprocess Modul nutzt. Dazu stellt dieses Modul eine Klasse zur Verfügung: Popen.

Verfasst: Donnerstag 1. Februar 2007, 15:39
von EnTeQuAk
Danke Sape :) das wusste ich auch noch nicht :D

Man lernt halt nie aus :D


MfG EnTeQuAk

Verfasst: Donnerstag 1. Februar 2007, 16:13
von sape
EnTeQuAk hat geschrieben:Man lernt halt nie aus :D
Das stimmt. Ist aber auch schön, so wird es nie langweilig :D

lg

Verfasst: Donnerstag 1. Februar 2007, 17:25
von birkenfeld
Was natürlich nicht heißt, dass `os.system()` nicht mehr verwendet werden soll. Für einfache Shellaufrufe tut es genauso wie subprocess, man braucht kein zusätzliches Modul importieren und die Semantik merkt man sich auch leichter ;)

Verfasst: Donnerstag 1. Februar 2007, 17:28
von sape
Ja das stimmt schon ;) Aber meist sind die Aufrufe ehe nicht "leicht".

Verfasst: Donnerstag 1. Februar 2007, 18:32
von Leonidas
birkenfeld hat geschrieben:man braucht kein zusätzliches Modul importieren
Und bei os.system etwa nicht? ;) Sorry - das musste jetzt einfach sein, ich hatte einen harten Tag...

Verfasst: Donnerstag 1. Februar 2007, 18:59
von birkenfeld
Leonidas hat geschrieben:
birkenfeld hat geschrieben:man braucht kein zusätzliches Modul importieren
Und bei os.system etwa nicht? ;) Sorry - das musste jetzt einfach sein, ich hatte einen harten Tag...
Nein, os ist eh immer importiert.

Gegen harte Tage hilft http://tinyurl.com/2c9sch... ;)

Verfasst: Donnerstag 1. Februar 2007, 19:03
von sape
birkenfeld hat geschrieben:
Leonidas hat geschrieben:
birkenfeld hat geschrieben:man braucht kein zusätzliches Modul importieren
Und bei os.system etwa nicht? ;) Sorry - das musste jetzt einfach sein, ich hatte einen harten Tag...
Nein, os ist eh immer importiert.
Komische Antwort :shock:

Nicht bei mir, nur wenn ichs brauche.

Verfasst: Donnerstag 1. Februar 2007, 19:57
von birkenfeld
sape hat geschrieben:
birkenfeld hat geschrieben:
Leonidas hat geschrieben:
birkenfeld hat geschrieben:man braucht kein zusätzliches Modul importieren
Und bei os.system etwa nicht? ;) Sorry - das musste jetzt einfach sein, ich hatte einen harten Tag...
Nein, os ist eh immer importiert.
Komische Antwort :shock:
Wieso?
Nicht bei mir, nur wenn ichs brauche.
Dann fragen wir mal so: Wie oft brauchst dus nicht? Noch dazu in einem Skript, wo offensichtlich systemnah gearbeitet wird...

Verfasst: Freitag 2. Februar 2007, 07:40
von mitsuhiko
Zumindest das gilt:

Code: Alles auswählen

blackbird@volverine:~$ python -c "import sys; print sys.modules.get('os')"
<module 'os' from '/usr/lib/python2.5/os.pyc'>
blackbird@volverine:~$ python -c "import sys; print sys.modules.get('subprocess')"
None