Aufruf von Python 2 Skript von Python 3

Ich habe zwei Skripte, die Hauptleitung ist in Python 3, und die zweite ist in Python 2 geschrieben (es verwendet auch eine Python 2 Bibliothek).

Es gibt eine Methode im Python 2-Skript, die ich aus dem Python 3-Skript anrufen möchte, aber ich weiß nicht, wie ich diese Brücke überquere.

2 Solutions collect form web for “Aufruf von Python 2 Skript von Python 3”

Du könntest python2 aus bash mit subprocess (python module) ausführen:

Von python 3 :

#!/usr/bin/env python3 import subprocess python3_command = "py2file.py arg1 arg2" # launch your python2 script using bash process = subprocess.Popen(python3_command.split(), stdout=subprocess.PIPE) output, error = process.communicate() # receive output from the python2 script 

Wo Ausgabe speichert, was Python 2 zurückgegeben hat

Das Aufrufen von verschiedenen Python-Versionen von einander kann sehr elegant mit 'execnet' durchgeführt werden. Die folgende Funktion macht den Charme:

 import execnet def call_python_version(Version, Module, Function, ArgumentList): gw = execnet.makegateway("popen//python=python%s" % Version) channel = gw.remote_exec(""" from %s import %s as the_function channel.send(the_function(*channel.receive())) """ % (Module, Function)) channel.send(ArgumentList) return channel.receive() 

Beispiel: Ein my_module in Python geschrieben 2.7:

 def my_function(X, Y): return "Hello %s %s!" % (X, Y) 

Dann ruft die folgende Funktion auf

 result = call_python_version("2.7", "my_module", "my_function", ["Mr", "Bear"]) print(result) result = call_python_version("2.7", "my_module", "my_function", ["Mrs", "Wolf"]) print(result) 

Resultiere in

 Hello Mr Bear! Hello Mrs Wolf! 

Was passiert ist, dass ein 'Gateway' instanziiert wurde, wartet auf eine Argumentliste mit channel.receive() . Sobald es my_function , wurde es übersetzt und an my_function . my_function die Zeichenfolge zurückgegeben und channel.send(...) hat den String zurückgeschickt. Auf der anderen Seite des Gateways channel.receive() fängt das Ergebnis und gibt es an den Anrufer zurück. Der Anrufer druckt schließlich den String, der von my_function im python 3-Modul erzeugt wird.

Python ist die beste Programmiersprache der Welt.