Aufrufen eines Python-Skripts mit Eingabe in einem Python-Skript mit Subprozess

Ich habe ein Skript a.py und während der Ausführung werden bestimmte Anfragen an den Benutzer gestellt und die Ausgabe im json-Format umrahmt. Mit dem Python-Subprozess kann ich dieses Skript von einem anderen Skript namens b.py . Alles funktioniert wie erwartet, außer dass ich die Ausgabe in einer Variablen nicht bekommen kann? Ich mache das in Python 3.

Um ein Python-Skript von einem anderen unter Verwendung des subprocess aufzurufen und um einige Eingaben zu übergeben und seine Ausgabe zu erhalten:

 #!/usr/bin/env python3 import os import sys from subprocess import check_output script_path = os.path.join(get_script_dir(), 'a.py') output = check_output([sys.executable, script_path], input='\n'.join(['query 1', 'query 2']), universal_newlines=True) 

Hier ist die function get_script_dir() definiert .

Eine flexiblere Alternative besteht darin, Modul a zu importieren und eine function aufzurufen, um das Ergebnis zu erhalten (stellen Sie sicher, dass a.py verwendet wird, if __name__=="__main__" bewacht, damit beim Import nicht unerwünschter Code ausgeführt wird):

 #!/usr/bin/env python import a # the dir with a.py should be in sys.path result = [a.search(query) for query in ['query 1', 'query 2']] 

Sie können mit mutliprocessing jede Abfrage in einem separaten process ausführen (wenn eine Abfrage CPU-intensiv ist, kann dies die mutliprocessing verbessern):

 #!/usr/bin/env python from multiprocessing import freeze_support, Pool import a if __name__ == "__main__": freeze_support() pool = Pool() # use all available CPUs result = pool.map(a.search, ['query 1', 'query 2']) 

Ein anderer Weg als erwähnt, ist die Verwendung der eingebauten function exec
Diese function ruft eine Zeichenfolge aus Python-Code ab und führt sie aus
Um es für eine Skriptdatei zu verwenden, können Sie es einfach als Textdatei read :

 #dir is the directory of a.py #a.py, for example, contains the variable 'x=1' exec(open(dir+'\\a.py').read()) print(x) #outputs 1