2016-03-30 11 views
1

Hallo ich Python zum ersten Mal schreibe:Aufruf py Skript von einem anderen py druckt den Wert

Ich habe eine bestehende getprop.py Skript, das die Eigenschaftendatei lädt und druckt den Wert einer bestimmten Eigenschaft:

import sys 
import util 

if len(sys.argv) < 3: 
    print "Error! Usage is: getprop.py [propfile] [propname]" 
    sys.exit(1) 

props = util.loadprops(sys.argv[1]) 
if sys.argv[2] in props: 
    print props(sys.argv[2]); 

Jetzt muss ich den Wert einer Immobilie in einem anderen py Skript bekommen, so modifiziert ich das Skript so, dass ich nicht stören seine Funktionalität und ich kann es in einem anderen Skript verwenden:

import sys 
import util 

def getpropvalue(propfile, propname): 
    props = util.loadprops(propfile) 
    if propname in props: 
    return props[propname] 

if len(sys.argv) < 3: 
    print "Error! Usage is: getprop.py [propfile] [propname]" 
    sys.exit(1) 

else: 
    print getpropvalue(sys.argv[1], sys.argv[2]); 

und dann in einem anderen Skript Ich importiere getprop und rufe die Methode wie getprop.getpropvalue (FILE_NAME, PROP_NAME) auf und es druckt den Wert der Eigenschaft auf dem Bildschirm.

Warum gibt es den Wert aus? Gibt es einen besseren Weg, um dieses Problem zu lösen?

+0

Was ist das erwartete Ergebnis? –

+0

versuchen: wenn __name__ == "__main__": dann die folgenden – SnakeFoot

+1

@SnakeFoot das ist falsch – Leva7

Antwort

2

ändern getprop.py zu diesem Lauf:

import sys 
import util 

def getpropvalue(propfile, propname): 
    props = util.loadprops(propfile) 
    if propname in props: 
    return props[propname] 

if __name__ == '__main__': 
    if len(sys.argv) < 3: 
     print "Error! Usage is: getprop.py [propfile] [propname]" 
     sys.exit(1) 

    else: 
     print getpropvalue(sys.argv[1], sys.argv[2]); 

Diese verhindert, dass der Code beim Import ausgeführt wird.

+0

Vielen Dank David! – user1731553

3

Es gibt eine Möglichkeit, das Skript nur auszuführen, wenn es direkt aufgerufen wurde. Fügen Sie diese Zeilen am Ende Ihres getprop Code:

if __name__ == "__main__": 
    main() 

Auf diese Weise die main Funktion nur aufgerufen werden soll, wenn Sie das Skript direkt (nicht importieren) laufen. Ist das wonach Sie suchen?
Einige Erklärung: Jedes laufende Skript hat eine __name__ Variable, die "__main__" gesetzt werden, wenn Sie das Skript von einem IDE oder Konsole wie python script.py

+0

Danke für die Erklärung Leva! – user1731553