Seite 1 von 1

Variablen in einer externen Datei abfragen

Verfasst: Sonntag 15. Januar 2006, 15:27
von Taranis
Hallo,
Aus Gründen der Übersichtlichkeit habe Ich mal testweise den Teil mit meinem Menü in eine externe Datei ausgelagert.
Mittels

Code: Alles auswählen

choice = raw_input('Eingabe: ')
will Ich nun die Sache steuerbar machen.
Ich kann aber die Variable choice in der Hauptdatei nicht abfragen.
Frage:
Wenn Ich Teile des Codes auslagere und in dem ausgelagerten Code Variable setze, wie kann Ich diese abfragen, bzw. mit den Variablen arbeiten, wenn sich der Hauptcode in einer anderen Datei befindet.

Ich hoffe Ich konnte mich einigermassen verständlich ausdrücken ...

Grüsse
Taranis

Verfasst: Sonntag 15. Januar 2006, 15:35
von Leonidas
Sieh mal auf die Seite [wiki]Modul Import[/wiki], dort wird das erklärt.

Verfasst: Sonntag 15. Januar 2006, 15:41
von Clython
Wenn ich das, was du tun willst richtig verstanden habe (und du drückst dich nicht besonders verständlich aus), dann kansst du das so machen:

Inhalt der ausgelagerten Datei:

Code: Alles auswählen

thing = raw_input("Input: ")
Speichere das als .py Datei im gleichen Verzeichnis wie die Hauptdatei ab (Beispiel: test_menu.py)
Inhalt der Hauptdatei:

Code: Alles auswählen

import test_menu
# Daraufhin wird der Code ausgeführt
#Mit:
print test_menu.thing
#kannst du dann auf die Varibale zugreifen.
Es funktioniert zwar, ist aber nicht besonder eleganter Code. Besser wäre es dein Menu als Funktion zu definieren...

Verfasst: Sonntag 15. Januar 2006, 18:10
von Taranis
Sorry - Hab mich wohl etwas falsch ausgedrückt.

Natürlich befindet sich mein Menü in einer Funktion.
Beispiel:
menu.py

Code: Alles auswählen

def menu():
    print """
    *************************************************************
                     
                (1) Bla
                (2) Blub
                (3) Blubber
   *************************************************************            
    """
    choice = raw_input('Eingabe: ')
Wie fragt man nun die Variable choice ab, ohne dass einem das System sagt: undefined varibale ..., wenn die Abfrage in einer anderen Datei steht?

Danke
Taranis

Verfasst: Sonntag 15. Januar 2006, 18:17
von Clython
Sollte eigentlich wie oben beschrieben funktionieren. Möglicherweise musst du folgendes benutzen:

modulname.menu.choice

Versuchs einfach mal über den Python-Interpreter

Verfasst: Montag 16. Januar 2006, 00:13
von BlackJack
Taranis hat geschrieben:Natürlich befindet sich mein Menü in einer Funktion.
Beispiel:
menu.py

Code: Alles auswählen

def menu():
    print """
    *************************************************************
                     
                (1) Bla
                (2) Blub
                (3) Blubber
   *************************************************************            
    """
    choice = raw_input('Eingabe: ')
Wie fragt man nun die Variable choice ab, ohne dass einem das System sagt: undefined varibale ..., wenn die Abfrage in einer anderen Datei steht?
Von aussen kannst Du `choice` nicht abfragen, ganz egal in welcher Datei die Funktion steht. `choice` ist innerhalb der Funktion ein lokaler Name. Sowie die Funktion endet, verschwindet `choice`.

Wieso gibst Du den Inhalt von `choice` nicht einfach als Rückgabewert der Funktion zurück?

Verfasst: Montag 16. Januar 2006, 08:35
von Taranis
Danke Blackjack,
Ich werde mir mal Funktionen eingeben ...

Grüsse
und eine
schöne Woche
Taranis

Oder...

Verfasst: Montag 16. Januar 2006, 09:49
von modelnine
Wenn Du schon ein Config-Modul hast, dann mach aus Deiner config.py einfach:

Code: Alles auswählen

def menu():
    global choice, blah, blubb, ...

    choice = <blah>
    <meine weiteren variablen blah, blubb, ...>
und im eigentlichen Modul:

Code: Alles auswählen

import config

print config.choice
print config.<meine weiteren variablen>
--- Heiko.

Re: Oder...

Verfasst: Montag 16. Januar 2006, 13:33
von Leonidas
modelnine hat geschrieben:Wenn Du schon ein Config-Modul hast, dann mach aus Deiner config.py einfach:

def menu():
global choice, blah, blubb, ...

choice = <blah>
<meine weiteren variablen blah, blubb, ...>
Nein, bitte keine Globals! Das kann man auf zig andere Weisen lösen. Das scheint zwar die einfachste Lösung zu sein, aber BlackJacks Vorschlag mit den Rückgabewerten ist wesentlich sauberer.

Verfasst: Montag 16. Januar 2006, 13:44
von modelnine
Hmm... Wenn man ein eigenes Config-Modul hat darin globals zu vergeben find ich selbst nicht problematisch, denn wenn ein Programm aus mehr als einer Datei besteht ist es am einfachsten einfach in alle Skripte dieses Config-Modul zu importieren, und auf die Konfiguration mittels der Globals des Moduls zuzugreifen.

Was ich sehr viel eher problematisch finde ist die Tatsache dass der Import des Config-Moduls die Konfiguration auslösen soll...

Kleines Beispiel:

a.py

Code: Alles auswählen

import config

if config.definefunk:
    def funk():
        print "In funk."
main.py

Code: Alles auswählen

import config
# Start Konfiguration.
config.config()

# Rest importieren.
import a

if config.definefunk:
    a.funk()
config.py

Code: Alles auswählen

def config():
    global definefunk
    definefunk = raw_input("Definiere funk in a? [J/N]").lower().startswith("j")
Das ist ungefähr das was der OP will. Was man natürlich anders lösen sollte ist config() von irgendwo aufzurufen. Zum Beispiel indem im config.py-Modul ein Bool gesetzt wird sobald config() einmal gelaufen ist, so dass nicht wieder konfiguriert werden kann.

Aber unabhängig davon, am besten man benutzt etwas was dafür gedacht ist:

http://www.python.org/doc/2.4.2/lib/mod ... arser.html

--- Heiko.

Verfasst: Mittwoch 18. Januar 2006, 18:32
von Taranis
Danke modelnine - Heiko,
und natürlich alle Anderen -

Nun hab Ich es intus

Grüsse
Taranis