42 Stimmen

Wie kann man in Python Variablen in verschiedenen Skripten gemeinsam nutzen?

Das Folgende funktioniert nicht

ein.py

import shared
shared.value = 'Hello'
raw_input('A cheap way to keep process alive..')

zwei.py

import shared
print shared.value

auf zwei Befehlszeilen als ausgeführt:

>>python one.py
>>python two.py

(der zweite erhält zu Recht einen Attributfehler).

Gibt es eine Möglichkeit, dies zu erreichen, d.h. eine Variable zwischen zwei Skripten zu teilen?

7 Stimmen

Meinen Sie, dass Sie einen Wert in zwei völlig getrennten Python-Sitzungen gemeinsam nutzen wollen? Wenn ja, ist das nicht möglich, indem Sie einfach einen Wert in einem gemeinsamen Modul setzen.

0 Stimmen

Ich danke Ihnen. Im Moment bin ich dabei, ein drittes Modul zu erstellen, das beide importiert, so dass alles in der gleichen Sitzung geschieht. Die Pickle-Lösung funktioniert nicht ganz für mich, weil ich eine threading.Condition()-Variable in einem Modul setzen wollte (die wegen der impliziten Sperre nicht gepickt werden kann) und sie von beiden Sitzungen aus verwenden wollte. Und jetzt, wo ich darüber nachdenke, ist die Möglichkeit, die Variable gemeinsam zu nutzen, wahrscheinlich das geringste meiner Probleme, da ich nicht glaube, dass der Zustand in der Bedingungsvariable gemeinsam genutzt werden wird.

0 Stimmen

Ich bin auf diese Frage gekommen, als ich das gleiche Problem hatte. Dann habe ich über Steckdosen gelesen. Warum sollte man sie nicht verwenden?

1voto

steveha Punkte 70950

In Ihrem Beispiel wird das erste Skript bis zum Ende ausgeführt und dann wird das zweite Skript ausgeführt. Das bedeutet, dass Sie eine Art dauerhaften Zustand benötigen. Andere Antworten haben die Verwendung von Textdateien oder Python's pickle Modul. Ich persönlich bin faul und würde keine Textdatei verwenden, wenn ich auch mit pickle Warum sollte ich einen Parser schreiben, um mein eigenes Textdateiformat zu parsen?

Anstelle von pickle können Sie auch die json Modul, um sie als JSON zu speichern. Dies könnte vorzuziehen sein, wenn Sie die Daten an Nicht-Python-Programme weitergeben wollen, da JSON ein einfacher und gängiger Standard ist. Wenn Ihr Python nicht über json erhalten simplejson .

Wenn Ihr Bedarf über die pickle o json -- sagen wir mal, Sie wollen zwei Python-Programme gleichzeitig ausführen und die persistenten Zustandsvariablen in Echtzeit aktualisieren -- ich schlage vor, Sie verwenden die SQLite Datenbank. Verwenden Sie ein ORM, um die Datenbank zu abstrahieren, und es ist super einfach. Für SQLite und Python empfehle ich Herbst ORM .

-1voto

Saish Shankar Punkte 1

Sie können die Grundfunktion from y import Funktionen in Python zum Importieren der Variablen in two.py . Zum Beispiel:

from filename import variable

Damit sollte die Variable aus der Datei importiert werden. (Natürlich sollten Sie die filename con one.py und ersetzen variable mit der Variable, die Sie freigeben möchten, an two.py .)

-4voto

Sie können dieses Problem auch lösen, indem Sie die Variable als global festlegen

python erste.py

class Temp:
    def __init__(self):
        self.first = None

global var1
var1 = Temp()
var1.first = 1
print(var1.first)

python zweite.py

import first as One
print(One.var1.first)

0 Stimmen

OP wollte wissen, wie man eine Variable zwischen zwei verschiedenen Prozesse nicht, wie die gemeinsame Nutzung zwischen verschiedenen Modulen innerhalb desselben Prozesses erfolgen soll.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X