2009-04-30 7 views
13

Uczyłem się Pythona przy użyciu samouczka, który jest dostarczany z standardową instalacją Pythona. Jedną z korzyści, które autor podaje na temat Pythona, jest "być może napisałeś program, który mógłby używać języka rozszerzonego i nie chcesz zaprojektować i zaimplementować zupełnie nowego języka dla twojej aplikacji" - Moje pytanie brzmi: zajmuję się projektowaniem programu (przy użyciu C#), który można interaktywnie rozszerzać za pomocą Pythona (aby było to możliwe, wyobrażam sobie, że musiałbym stworzyć tryb "powłoki" lub "interaktywny" dla programu .net)?Tworzenie interaktywnej powłoki dla aplikacji .NET i osadzanie w niej języków skryptowych, takich jak python/iron python

Czy są jakieś wskazówki dotyczące projektowania programów .NET z powłoką interaktywną. Chciałbym wtedy użyć skryptu Pythona w powłoce do "rozszerzenia" lub interakcji z programem.

EDIT: To pytanie częściowo wynika z demo dać przez Miguel de Icaza podczas PDC 2008, gdzie pokazał interaktywny wiersz polecenia CSharp, C# 4.0 myślę, ma również tę „kompilator jako usługa” funkcji. Spojrzałem na to i pomyślałem, jak fajnie byłoby zaprojektować program Windows lub WWW w .NET, który miał interaktywną powłokę ... a język skryptowy taki jak Python mógłby zostać użyty do rozszerzenia funkcji dostarczanych przez program.

Zacząłem też myśleć o tego typu funkcjach po przeczytaniu esejów Steve'a Yegge'a o systemach, które żyją wiecznie.

+0

Prawie to samo pytanie przeze mnie: http://stackoverflow.com/questions/801432/how-to-create-idle-like-functionality-to-informacje-application/801443#801443 – Harriv

+0

możesz użyć PythonNET do wywołania C# z Python i Python z C# – denfromufa

Odpowiedz

12

To brzmi jak wielka korzyść z IronPython.

Jest dość łatwy do skonfigurowania prosty host skryptów z C#, aby umożliwić połączenia do skryptów IronPython, a także pozwalając IronPython wywołać kod C#. Na stronie CodePlex znajdują się przykłady i przykłady, które pokazują, jak to zrobić.

Innym dobrym miejscem do przykładów i próbek jest ironpython.info

I here is a page poświęcony przykład odpowiadając na samo pytanie, choć w ogólnej DLR-centric sposób - Pozwoliłoby to na organizację IronPython, IronRuby, lub jakiegokolwiek Języki DLR, które chcesz obsługiwać.

Użyłem tych przykładów w przeszłości do stworzenia środowiska IronPython wewnątrz prywatnej instalacji ScrewTurn Wiki - pozwoliło mi to stworzyć bardzo ekspresyjne szablony Wiki i okazało się bardzo przydatne w ogóle.

+0

Dziękujemy za linki Erik. Sprawdzam, jak można ustawić hosta skryptów z C# – Developer

+0

Za każdym razem. =) –

0

Nie wiem co masz na myśli z

„przedłużyć” lub interakcji z programu

więc nie mogę odpowiedzieć na to pytanie. Czy możesz dać przykład?

Jest open source shell # interaktywny C w mono: http://www.mono-project.com/CsharpRepl

Kiedy jak pyton, Net i rozszerzenie języka, prawdopodobnie lubią Boo nad ironpython. Boo ma również interaktywną powłokę open source.

Nie zgadzam się z

„nie chcą zaprojektować i wdrożyć zupełnie nowy język dla aplikację”

To nie jest tak trudne jak kiedyś być stworzenie prosty DSL. Nie zajmie ci to wiele dni, zaledwie kilka godzin. To może być interesująca opcja.

+0

Przez "rozszerzenie" lub "interakcję", mam na myśli powłokę bardzo podobną do tej w linku, który podałeś, ta powłoka pozwoli mi uruchamiać polecenia dające mi wgląd w bieżący stan programu i powłokę czy mogę spożywać niektóre metody dostarczone przez program i rozszerzyć je, pisząc jakiś skrypt ... – Developer

1

Python jako język rozszerzenia nazywa się "Osadzanie w języku Python".

można wywołać moduł Pythona z C++ przez wywołanie w zasadzie pythona intepretera i wykonanie go ze źródła Pythona. Nazywa się to embedding.

Działa z C i C++ i prawdopodobnie będzie działał równie dobrze z C#.

I nie, nie potrzebujesz żadnej "skorupy". Chociaż Python może być interaktywny, to wcale nie jest wymagany.

+0

Dziękuję !!! Próbowałem znaleźć odpowiedni termin, aby opisać moją myśl o używaniu Pythona jako języka rozszerzającego. – Developer

+0

Proponuję użyć IronPython zamiast próbować osadzić CPYthon w aplikacji .NET. – Harriv

3

Szukałem rozwiązania tego samego problemu i stwierdzili IronTextBox: http://www.codeproject.com/KB/edit/irontextbox2.aspx

on potrzebuje trochę strojenie dla aktualnej wersji, ale wydaje się, że wszystko, co potrzebne. Najpierw go skompilowałem, a następnie dodałem zmienne, które chciałem uzyskać z powłoki do zakresu.

1

Jeśli Twoim celem jest uniknięcie nauki nowego języka, możesz użyć CSScript.Net i wbudowanych skryptów napisanych w aplikacji C# lub VB. Z CSScript uzyskujesz pełny dostęp do CLR. Obsługiwane są trzy różne modele wykonywania skryptów, dzięki czemu można wykonywać skrypty odwołujące się do obiektów w bieżącej domenie aplikacji, wykonywać je za pomocą zdalnego sterowania lub wykonywać jako powłokę.

Obecnie używam CCScript jako "kleju" kodu do konfigurowania obiektów aplikacji nieco podobne do korzystania z Boo.

Ten link zadania do kodu artykułu projektu, który zapewnia dobry przegląd.

Powiązane problemy