Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Python "dynamisch" importieren

  1. #1
    Registrierter Benutzer Avatar von SeCa
    Registriert seit
    07.11.2002
    Beiträge
    64

    Python "dynamisch" importieren

    Hallo,
    ich möchte wenn ich z.B diesen string habe:
    'echo wie geht es dir'
    das erste wort (hier echo) importieren.

    Das habe ich so versucht.

    import string
    hallo = string.split('echo wie geht es dir')
    import hallo[0]

    jetzt meint python aber es müsse die datei hallo[0].py einbinden und nicht echo.py
    Gibt es irgend eine lösung für mein problem?

    Wär sehr dankbar für eure hilfe.

    Gruss SeCa

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Beiträge
    222
    das geht so nicht,
    import benutzt einfach den ihm folgenden identifier direkt als dateinamen,
    wofür brauchst aber sowas?

    nebenbei, import string ist bei python(2.x) nicht mehr nötig:
    Code:
    text = 'echo wie geht es dir' 
    text.split()
    gruss
    Arthur

  3. #3
    Registrierter Benutzer Avatar von SeCa
    Registriert seit
    07.11.2002
    Beiträge
    64
    hallo,
    ich habe mir überlegt wenn ich ein server bauen will, der auf befehle auf einen port wartet, wäre es noch praktisch, wenn jeder befehl eine datei wär. So könnte ich bei echo einfach die datei echo.py importieren dann mit echo.rechte() schauen ob die rechte stimmen und dann echo.order() ausfuehren. So hatte ich mir das etwa vorgestellt.
    Ich möcht, dass man während des betriebs neue Befehle einbauen kann. Also so dynamisch wie möglich das ganze ...

    Weis jemand für mein Problem eine lösung?

    mfg SeCa

    PS: arthur hasst du irgend ein link wo die unterschiede auf die neue python version beschrieben sind? Ich hatte nicht gewusst, dass es so grosse unterschiede gibt.
    Danke

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Beiträge
    222
    hab das hier noch gefunden
    __import__(name[, globals[, locals[, fromlist]]])
    This function is invoked by the import statement. It mainly exists so that you can replace it with another function that has a compatible interface, in order to change the semantics of the import statement. For examples of why and how you would do this, see the standard library modules ihooks and rexec . See also the built-in module imp , which defines some useful operations out of which you can build your own __import__() function.
    For example, the statement "import spam" results in the following call: __import__('spam', globals(), locals(), []); the statement "from spam.ham import eggs" results in "__import__('spam.ham', globals(), locals(), ['eggs'])". Note that even though locals() and ['eggs'] are passed in as arguments, the __import__() function does not set the local variable named eggs; this is done by subsequent code that is generated for the import statement. (In fact, the standard implementation does not use its locals argument at all, and uses its globals only to determine the package context of the import statement.)

    When the name variable is of the form package.module, normally, the top-level package (the name up till the first dot) is returned, not the module named by name. However, when a non-empty fromlist argument is given, the module named by name is returned. This is done for compatibility with the bytecode generated for the different kinds of import statement; when using "import spam.ham.eggs", the top-level package spam must be placed in the importing namespace, but when using "from spam.ham import eggs", the spam.ham subpackage must be used to find the eggs variable. As a workaround for this behavior, use getattr() to extract the desired components. For example, you could define the following helper:
    Code:
    import string
    
    def my_import(name):
        mod = __import__(name)
        components = string.split(name, '.')
        for comp in components[1:]:
            mod = getattr(mod, comp)
        return mod
    zu deiner zweiten fragen:
    nein, leider nicht, ich würde mich an die docu auf www.python.org halten.
    leider hat sich python zwischen 1.5 und 2.2 extrem verändert,
    wenn du rückwärts kompatible bleiben möchtest musst du auf viele nette
    features verzichten.

    gruss
    Arthur

  5. #5
    Registrierter Benutzer Avatar von SeCa
    Registriert seit
    07.11.2002
    Beiträge
    64
    Danke arthur für deinen Text. Werde in morgen mal durchlesen (heute bin ich ein bisschen zu müde ) und meine weiteren Fragen hier posten.

    Das problem ist bei mir das ich python nie richtig gelernt habe, das kamm so nach und nach und jetzt jedesmall wenn ich ein tut. in die finger nehme stinkt es mir das zu lesen, weil ich die hälfte schon kenne. Ich werde mal schauen ob ich ein tut mit den neuen features finde.

    Hmm das mit s.strip() ist schon sehr verblüffend:
    s = 2
    s.split() --> ergibt fehler
    s = 'asdfjadl asdf das'
    s.split() --> jetzt gehts ....

    Man kann also mit einer Zuweisung den Inhalt und den Typ der Variable verändern. Das ist mir neu.
    Gute Nacht

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •