2016-08-07 50 views
0

Ich habe ein kleines Problem mit exec(). Ich habe eine Zeichenfolge von Kivy GUI, die ich ausführen und Werte aus dem ausgeführten Code speichern muss.Python 3 - brauche von exec(), um Werte zurückzugeben

class gui(BoxLayout): 
    def proces(self): 
     t = threading.Thread(target=self.graf) 
     t.daemon = True 
     t.start() 

    def graph(self): 

     CodeInput=self.ids.codas 
     Code=CodeInput.text 
     x, y = [], [] 
     exec(Code) 
     print(x,y) # empty list prints 
     # then x y will serve for plotting a graph 

Dies ist ein String in der 'Code':

def values(): 
    x=np.linspace(0,3.14,100) 
    y=np.sin(x) 
    print(x) # of course works 
    return x,y 
x,y=values() 

alles funktioniert, außer ich die Werte x cant get, y von exec (Kodex). Es ist wie exec() eine völlig separate Operation, die gestartet werden kann, aber nicht eingegeben werden kann.

Antwort

2

Sie sollten exec mit einem lokalen Namespace nennen:

loc = {} 
exec(Code, {}, loc) 
x = loc['x'] 
y = loc['y'] 
+0

Dank sehr viel. Es funktioniert – Martin

+2

, wenn die Antwort Ihnen hilft, bitte akzeptieren Sie es – Daniel