Appelez Python à partir de .NET
J'ai un code écrit en Python qui ne peuvent pas être transférés à un .NET de la langue. J'ai besoin d'appeler une de ces fonctions à partir de mon .NET WinForms application.
Maintenant, je le fais en commençant par le script Python en tant que processus distinct et de passer des paramètres à ce que les arguments de ligne de commande. Cela fonctionne, mais je n'aime pas cette solution. J'aimerais l'améliorer pour un meilleur.
Est-il un meilleur moyen pour appeler une fonction d'une .py
script à partir d'un .NET application? Quelle est la meilleure façon de le faire?
Remarque: IronPython est PAS une option pour ce script Python
source d'informationauteur Tom
Vous devez vous connecter pour publier un commentaire.
Pas, autant que je sache, il n'y a pas une meilleure solution, surtout si IronPython est un non-non pour vous. Donc, vous pouvez toujours garder cela comme une solution temporaire en attendant que le script de migration .NET ou jusqu'à ce que vous trouvez que quelqu'un l'a déjà écrit une bibliothèque .NET qui vous offre des fonctionnalités similaires.
Cela pourrait être un beaucoup plus de travail que le lancement de l'Python processus, mais voici une solution alternative.
Vous pouvez incorporer Python dans un autre programme. L'API C et de l'Interopérabilité .NET sera probablement une grande douleur. Si vous êtes dans un peu de moyen plus sûr pour gérer les natifs de l'API Python, vous pouvez regarder dans
Boost.Python
qui, parmi ses moins de fonctionnalités annoncées, a soutien pour l'intégration.Avec ces outils, vous pouvez l'écrire en C++ managé DLL qui utilise
Boost.Python
à la charge de l'interpréteur Python et d'exécuter le script Python. Ainsi, vous pouvez exécuter n'importe quel code Python directement dans le processus d'hébergement, d'éliminer l'utilisation d'un processus externe et de toute forme de CLASSIFICATION.Modifier: autant que je sache, vous n'avez qu'à ajouter à votre procédure d'installation est le déploiement de l'Python DLL et
Boost.Python
DLL.En plus de la COM option, vous pourriez faire de votre script Python instancier un serveur xmlrpc -
il est tout à fait transparente et vous n'aurez jamais à faire face à "xml" sur votre propre code.
Puis, sur .net vous suffit de vous connecter à votre application python via xmlrpc - si il n'existe pas de moyen de le faire en C#, il suffit d'écrire une fonction client en IronPython.
La SimpleXMLRPCServer exemple sur la documentation Python est assez pour que:
http://docs.python.org/library/simplexmlrpcserver.html
Je pense que vous avez besoin de réévaluer Carlos réponse.
Voir la section sur la mise en Œuvre des Objets COM avec Python de Marque Hammond livre de Programmation Python sur Win32.
Vous devriez être capable de créer un objet COM, puis ont .Net interagir avec elle.
À partir du livre de la suivante permet de créer un serveur COM avec une seule méthode.
Le livre continue à dire ".. vous pouvez le faire en exécutant le code comme un script Python. La façon la plus simple pour ce faire est d'ouvrir le fichier source dans PythonWin et utiliser la commande Exécuter dans le menu Fichier. "
Je pense que vous avez besoin de la ActivePython distribution de Activestate de le faire.
Le voir, cette question Consommer Python Serveur COM de .NET
Créer un COM .dll à partir d'un .py script et l'utilisation de l'Interopérabilité dans votre .NET code.
Jetez un oeil ici: http://docs.python.org/faq/windows.html
PythonNet devrait aider avec celui-ci. Il vous permet d'appeler du code python à partir de C#.
Une manière plus propre consiste à exposer le script python via un Flacon API REST et consommez-le de votre .NET Application. N'oubliez pas de mettre l'authentification correcte en place.