Seite 1 von 1
Datei Öffen und den Inhalt ausführen???
Verfasst: Samstag 26. Januar 2008, 19:24
von Andyh
Hallo
Ich möchte in einer Datei gespeicherte "def" aufrufe ausführen.
Die Datei die geöffnet wird sieht so aus:
test1()
test2()
test3()
Im Programm gibt es dann die drei def´s dazu.
Die Datei öffen ich so:
Code: Alles auswählen
def oeffnen():
name = raw_input("geben sie den Namen der Datei ein: ")
datei = file(name, "r")
global line
for line in datei.readlines():
print line
datei.close
Wenn ich "print line" schreibe kommt der Inhalt also wird die Datei schonmal gelesen, nur wie bekomme ich es hin das erst test1() und dann test2() und dann test3() ausgeführt wird.
Gruß
Andyh
Verfasst: Samstag 26. Januar 2008, 19:39
von Nikolas
Ich würde mal sagen, dass du die Datei nicht lesend öffnest, sondern ein ganz normales import oder reimport (?) machst, also so wie immer, wenn du Definitionen aus einer anderen Datei holst.
Verfasst: Samstag 26. Januar 2008, 19:40
von Craven
Einen String kann man mit exec "ausführen", z.B.:
Aber obs das so bringt ...
Verfasst: Samstag 26. Januar 2008, 19:47
von Andyh
Hallo
Das geht ja schnell!
@Nikolas
Kannst du mir das bitte näher erklären?
Ich habe noch nicht viel mit Dateien gearbeitet. Die ganzen Tutorials beschreiben nur wie ich den inhalt ausgebe (mal die wo ich gefunden habe).
ich erwarte keine fertige Lösung (ich will ja sagen könne, hab ich gemacht), ein guter verweis (auf Deutsch)recht ja, oder ein code Schnipsel.
@Craven
Ich habe exec gerade ausprobiert. Wenn die Datei eine Zeile hat dann wird die ausgeführt, bei mehr wie einer wird nur die letzt ausgeführt. Wie kann ich das ändern?
Gruß
Andyh
Verfasst: Samstag 26. Januar 2008, 20:20
von Craven
Ich glaube, execfile wäre hier doch besser, dann kannst du dir das einzelne auslesen sparen, da du ja eh alle ausführen willst.
Das könnte man z.B. so machen:
Code: Alles auswählen
a = "C:\\dokumente und einstellungen\\craven\\desktop\\a.py"
def asd1():
print "asd1"
def asd2():
print "asd2"
def asd3():
print "asd3"
execfile(a) # einfach einen String mit dem Pfad an execfile übergegen
In der Datei a.py stehen, wie bei dir, die Funktionsaufrufe.
Und jetz erklär mir bitte, wozu du das brauchst.
Verfasst: Samstag 26. Januar 2008, 20:27
von gerold
Hallo Andyh!
Wenn du auch nur einen Funken Sicherheit in deiner Anwendung haben möchtest, dann würde ich es nur zulassen, die gegebenen Funktionen auszuführen.
Z.B. so:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# Die zugehörige Textdatei (abc.txt) sieht so aus:
# test1
# test3
# test2
def test1():
print "ich bin test1"
def test2():
print "ich bin test2"
def test3():
print "ich bin test3"
def main():
functions = {
"test1": test1,
"test2": test2,
"test3": test3,
}
filename = "abc.txt"
my_file = file(filename, "rU")
for line in my_file:
line = line.strip()
if not line:
continue
# Ausführen
functions[line]()
my_file.close()
if __name__ == "__main__":
main()
mfg
Gerold
Verfasst: Samstag 26. Januar 2008, 20:34
von Andyh
Hallo
Danke für die super Lösung!
Habe alles mal wieder viel zu kompliziert gemacht
Für was ich das brauche:
Ich möchte ein Programm in unterschiedlicher Reihenfolge ablaufen lassen(nur zum testen) und um nicht jedes mal das Programm umschreiben zu müssen will ich es gerne über eine Datei machen.
Ich schon getestet und lauft wie ne 1, besten Dank!
EDIT: Gerold, das ist ja eine feine lösung, Danke
Gruß
Andyh
Verfasst: Samstag 26. Januar 2008, 22:10
von Jan-Peer
Hmja, viele Wege führen nach Rom, aber eigentlich würde man es wohl eher so machen:
Code: Alles auswählen
import pythondateimitfunktionen
pythondateimitfunktionen.test2()
pythondateimitfunktionen.test1()
pythondateimitfunktionen.test3()
In eine eigene Python-Datei im selben Verzeichnis packen und dann immer nur diese ausführen.