Wie rufe ich ein Skript aus einem anderen Skript auf?
Lesezeit: 5 Minuten
Josh Smeaton
Ich habe ein Skript namens test1.py was nicht in einem Modul ist. Es enthält lediglich Code, der ausgeführt werden soll, wenn das Skript selbst ausgeführt wird. Es gibt keine Funktionen, Klassen, Methoden usw. Ich habe ein anderes Skript, das als Dienst ausgeführt wird. Ich möchte anrufen test1.py aus dem Skript, das als Dienst ausgeführt wird.
Zum Beispiel:
Datei test1.py:
print "I am a test"
print "see! I do nothing productive."
Datei service.py:
# Lots of stuff here
test1.py # do whatever is in test1.py
Der bessere Weg besteht darin, Methoden und Klassen zu schreiben und sie zu verwenden
– Aamir
27. Juli 2009 um 7:00 Uhr
Verwandt: Python 3: Python-Skript mit Eingabe in einem Python-Skript mithilfe eines Unterprozesses aufrufen
– jfs
29. November 2015 um 8:40 Uhr
Siehe diese Antwort: stackoverflow.com/a/71967141/1364242
– Jay M
22. April 2022 um 10:20 Uhr
Der übliche Weg, dies zu tun, sieht etwa wie folgt aus.
test1.py
def some_func():
print 'in test 1, unproductive'
if __name__ == '__main__':
# test1.py executed as script
# do something
some_func()
service.py
import test1
def service_func():
print 'service func'
if __name__ == '__main__':
# service.py executed as script
# do something
service_func()
test1.some_func()
Was ist, wenn test1.py liegt in einem weit entfernten Verzeichnis?
Das beantwortet die Frage aber nicht wirklich, oder? Sie führen nicht das gesamte Skript aus, sondern einige Funktionen innerhalb des Skripts, das Sie importieren.
– Gented
22. März 2017 um 10:36 Uhr
@GennaroTedesco: Du liegst falsch. Der import test1 In service.py führt das tatsächlich aus ganz Skript (das nur definiert some_func() seit __name__ == '__main__' wird sein False In diesem Fall). Das hört sich nach allem an, was das OP tun möchte. Diese Antwort geht darüber hinaus, beantwortet aber definitiv die Frage – und noch mehr.
– Martineau
6. November 2017 um 17:15 Uhr
Wenn, sagen wir, test1.py enthielt nicht die Definition der Funktion some_func() (sondern zum Beispiel nur ein paar Zeilen Code print("hello")), dann würde Ihr Code nicht funktionieren. In diesem speziellen Beispiel funktioniert es, weil Sie im Wesentlichen eine externe Funktion importieren, die Sie anschließend zurückrufen.
Informationen zum Umgang mit Namespaces finden Sie in der Dokumentation, sofern dies in Ihrem Fall wichtig ist.
Sie sollten jedoch einen anderen Ansatz in Betracht ziehen; Ihre Idee sieht (soweit ich sehen kann) nicht sehr sauber aus.
Dieser Ansatz führt die Skripte innerhalb des aufrufenden Namespace aus. 🙂 🙂
– dmvianna
21. Okt. 2013 um 5:46
Um Befehlszeilenargumente an das Skript zu übergeben, können Sie diese bearbeiten sys.argv Liste.
– jfs
13. Januar 2015 um 18:09
Umfassendere Behandlung von Python 3-Äquivalenten: stackoverflow.com/questions/436198/…
– John Y
4. August 2016 um 15:38
Dies akzeptiert keine Argumente (die an die PY-Datei übergeben werden sollen)!
– Apostolos
13. September 2018 um 10:43 Uhr
Ich möchte, dass es das kompiliert .py in ein .pyc Daher sind nachfolgende Ausführungen schneller. Ich gehe davon aus, dass das dafür nicht funktionieren wird? Grundsätzlich möchte ich das gesamte Skript wie ein Modul importieren und dann das Hauptskript darin ausführen.
Der Vorteil dieser Methode besteht darin, dass Sie kein vorhandenes Python-Skript bearbeiten müssen, um seinen gesamten Code in eine Unterroutine einzufügen.
Ich musste es benutzen subprocess.call("./test1.py", shell=True) damit es funktioniert
– asmaier
17. April 2013 um 9:45 Uhr
Verwende nicht shell=True es sei denn, es ist notwendig.
– Pjotr Dobrogost
3. November 2013 um 10:58
@PiotrDobrogost – Können Sie angeben, in welchen Situationen dies erforderlich sein würde?
– sancho.s ReinstateMonicaCellio
26. Dezember 2013 um 13:12 Uhr
Unter einem typischen Unix funktioniert es nicht, wenn sich das aktuelle Verzeichnis nicht in PATH befindet. test1.py sollte ausführbar sein und die Shebang-Zeile (#!/usr/bin/env python) und Sie sollten den vollständigen Pfad angeben oder Sie müssen die ausführbare Datei selbst bereitstellen: call([sys.executable, os.path.join(get_script_dir(), 'test1.py')]) Wo get_script_dir() wird hier definiert.
– jfs
13. Januar 2015 um 18:14
Oder subprocess.call(['python', 'test1.py']).
– Big McLargeHuge
6. März 2018 um 16:06 Uhr
import os
os.system("python myOtherScript.py arg1 arg2 arg3")
Mit OS können Sie direkt zu Ihrem Endgerät telefonieren. Wenn Sie noch genauer sein möchten, können Sie Ihre Eingabezeichenfolge mit lokalen Variablen verketten, d. h.
Der bessere Weg besteht darin, Methoden und Klassen zu schreiben und sie zu verwenden
– Aamir
27. Juli 2009 um 7:00 Uhr
Verwandt: Python 3: Python-Skript mit Eingabe in einem Python-Skript mithilfe eines Unterprozesses aufrufen
– jfs
29. November 2015 um 8:40 Uhr
Siehe diese Antwort: stackoverflow.com/a/71967141/1364242
– Jay M
22. April 2022 um 10:20 Uhr