2016-07-30 27 views
1

Ich versuche, Informationen zwischen zwei verschiedenen Python-Skripten zu übergeben. Sie sind ziemlich lang, so zum Zwecke der Vereinfachung, hier sind zwei andere Skripte, wo ich das gleiche Problem auftreten:Wie übergebe ich Variablen zwischen zwei verschiedenen Python-Skripten Ich habe

a.py

f = open('test.txt', 'w+') 
num = int(raw_input('How many are there: ')) 
tipe = raw_input('What kind are they: ') 

if __name__ == '__main__': 
    from b import fxn 

    for x in xrange(num, num+11): 
     fxn() 
     num = x 

    f.close() 

b.py

from a import num, tipe 

def fxn(): 
    print num, tipe 
    f.writelines(str(num)+', '+tipe) 

ich gefragt werde, für num und tipe zweimal, dann werden die Einträge vom zweiten Mal 11 Mal gedruckt.

Wie kann ich es machen, dass die Variablen/Dateien in a.py an b.py übergeben, bearbeitet/bearbeitet/manipuliert in b.py, dann zurückgegeben/geschlossen in a.py?

auch, warum bin ich für num und tipe zweimal gefragt, dann unter der Code, wenn Name == 'Haupt': laufen wird?

+0

Funktionen können Parameter übernehmen. Der Grund, warum Sie zweimal zur Eingabe aufgefordert werden, ist, dass die IO-Operationen im globalen Gültigkeitsbereich liegen und bei jedem Import von a ausgeführt werden. – mljli

Antwort

0

Beachten Sie beim Übergeben von Variablen zwischen Python-Skripts, dass das aufrufende Skript beim Aufrufen eines Skripts auf den Namespace des aufgerufenen Skripts zugreifen kann.

Dass gesagt wird, könnte man diesem einen Versuch geben: Starten Sie das genannte Skript mit dem Code

from __main__ import * 

Dies gewährt den Zugriff auf den Namespace (Variablen und Funktionen) des Anrufers Skript. Da dies nicht wirklich die Dateien sind, die Sie manipulieren werden, wie Sie zuvor gesagt haben, werde ich es Ihnen überlassen, dies auf die echten Dateien anzuwenden, hoffe, dies hilft.

0

Sie können sie durch Funktionen übergeben

a.py

f = open('test.txt', 'w+') 
num = int(raw_input('How many are there: ')) 
tipe = raw_input('What kind are they: ') 

if __name__ == '__main__': 
    from b import fxn 

    for x in xrange(num, num+11): 
     fxn(num, tipe, f) # Pass parameters num, tipe and file handle 
     num = x 

    f.close() 

b.py

# from a import num, tipe --> **This is not required** 

# receive inputs 
def fxn(num, tipe, f): 
    print num, tipe 
    f.writelines(str(num)+', '+tipe) 

a.py Executing in

3 fruits 
3 fruits 
4 fruits 
5 fruits 
6 fruits 
7 fruits 
8 fruits 
9 fruits 
10 fruits 
11 fruits 
12 fruits 
führen

3 Früchte werden zweimal gedruckt, weil zuerst die Funktion aufgerufen wird und dann die Anzahl erhöht wird (durch Neuzuweisung). Stattdessen können Sie Ihre a.py haben, wie unter 3 Früchte nur einmal gedruckt haben:

f = open('test.txt', 'w+') 
num = int(raw_input('How many are there: ')) 
tipe = raw_input('What kind are they: ') 

if __name__ == '__main__': 
    from b import fxn 

    for x in xrange(num, num+11): 
     fxn(x, tipe, f) # Pass parameters num, tipe and file handle 

    f.close()