2010-12-16 9 views
1

Hat jemand wissen, ob ich ein Skript one.py haben, die die folgende Art und Weise geschrieben:Python - laufen externes Skript

if __name__ == '__main__': 
    # Do something 

Und ich möchte aus einem anderen Skript, dass main Funktion aufzurufen. Wie soll ich das machen?

ich denke, es so etwas wie sein würde (sagen wir mal diese launcher.py ist)

# 'one' stands for import from `one.py` module 
import one 

if __name__ == '__main__': 
    one.main() 

Das einzige Problem ist, dass ich nicht main() so nennen kann.

Wie soll das gemacht werden?

Antwort

1
with file('a.py','rU') as f: 
    co=compile(f.read(),'foobar','exec') 
    exec co in {'__name__':'__main__'} 
+4

Das funktioniert, aber es ist nicht der richtige Weg, es zu tun. Der Punkt ist, dass der '__name__ == '__main __' Sentinel überprüft, ob Ihr Programm eigenständig ausgeführt wird. Sicher, Sie können so tun, als ob es das ist, aber Sie sollten nicht - stattdessen sollten Sie die API aufrufen, die sie selbst darstellt! Das heißt, Sie rufen 'a.main()' von 'b 'auf. – katrielalex

+1

Neben dem, was @katrielalex sagt, scheint dies unnötig komplex zu sein und auf den ersten Blick nicht verständlich zu sein. –

+0

Ich bin mit Katrielalex und Felix, das tut was erforderlich ist, aber es ist definitiv nicht der Weg zu gehen. – slezica

8

Definieren Sie Ihr Skript wie:

def main(): 
    # Do something 

if __name__ == '__main__': 
    # Processing of possible input parameters here and passing to main 
    main() 

Dann können Sie

# 'one' stands for import from `one.py` module 
import one 

if __name__ == '__main__': 
    one.main() 

Natürlich tun können Sie die Funktion nennen, wie Sie wollen.

Verwandte Themen