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:
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.
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
Man lernt halt nie aus
MfG EnTeQuAk
Verfasst: Donnerstag 1. Februar 2007, 16:13
von sape
EnTeQuAk hat geschrieben:Man lernt halt nie aus
Das stimmt. Ist aber auch schön, so wird es nie langweilig
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
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
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