🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
5 messages
5 total messages Started by Sebastian Biały Sat, 17 Feb 2018 08:35
Python w pythonie ale nie w oczywisty sposób
#28637
Author: Sebastian Biały
Date: Sat, 17 Feb 2018 08:35
42 lines
2736 bytes
Cześć.

Jest Aplikacja napisana w Pythonie. Zawiera ona wiele małych kawałków 
funkcjonalnych. Może ale nie musi być kompilowana do exe.

Aplikacja służy do realizacji wielu zadań z jakiejś dziedziny.

Chciałbym aby kawalki tej Aplikacji byly posklejane glue logic w postaci 
skryptów pythona bedących na dysku i w zasiegu zmian usera.

Wyobrażam sobie to tak że ktoś wybiera jakieś opcje w GUI Aplikacji a 
nastepnie wybiera jakiś skrypt i go uruchamia wewnatrz mojego środowiska.

Czym powinienem sie zainteresować aby uzyskac taki efekt? Chce pewne 
cechy które nie sa typowe:

a) chciałbym aby uruchamiany skrypt dostał pewien zbior obiektów które 
dostarcze z aplikacji. Np. dostarcze tam (obiekt?) Options z ktorego 
wyczyta co wyklikał user w GUI. Dostanie rowneż Output który będzie miał 
metody printujące w konsoli GUI w Aplikacji.

b) chciałbym miec całkowitą kontrolę nad skryptem, mogę go w dowolnym 
momencie wylączyć. Idealem było by gdybym mógł go równiez zatrzymac i 
wznowić.

c) absolutnie znakomite było by gdyby mechanizm udostepniał pracę 
krokowa skryptu. W Aplikacji bylo by coś w rodzaju 
script().doNextStatement() w pętli. Wyglądalo by to troche jak 
koprocedura. I idealnie bez normalnego stosu tak aby nie musiało to 
lecieć w osobnym wątku.

Wszystko to zrobiłem już w innych językach (Aplikacja w Java, skrypty w 
JavaScript, Aplikacja w C++, skrypty w JavaScript). Zakładam że w 
Pythonie powinno być łatwiej bo tam nie zawsze było łatwo. Może jednak 
źle zakładam. Może mi ktoś podrzucić co wklepać w google i gdzie zacząć?

Interesują mnie głównie dwa tematy:

1) jak przekazywać obiekty i ogólnie komunikować się ze skryptem.

2) czy istnieje interpreter Pythona w formie koprocedury który mogę 
wykorzystać w tym zastosowaniu
Re: Python w pythonie ale nie w oczywisty sposób
#28638
Author: m
Date: Sat, 17 Feb 2018 12:18
47 lines
2907 bytes
W dniu 17.02.2018 o 09:35, Sebastian Biały pisze:
> Cześć.
> 
> Jest Aplikacja napisana w Pythonie. Zawiera ona wiele małych kawałków 
> funkcjonalnych. Może ale nie musi być kompilowana do exe.
> 
> Aplikacja służy do realizacji wielu zadań z jakiejś dziedziny.
> 
> Chciałbym aby kawalki tej Aplikacji byly posklejane glue logic w postaci 
> skryptów pythona bedących na dysku i w zasiegu zmian usera.
> 
> Wyobrażam sobie to tak że ktoś wybiera jakieś opcje w GUI Aplikacji a 
> nastepnie wybiera jakiś skrypt i go uruchamia wewnatrz mojego środowiska.
> 
> Czym powinienem sie zainteresować aby uzyskac taki efekt? Chce pewne 
> cechy które nie sa typowe:
> 
> a) chciałbym aby uruchamiany skrypt dostał pewien zbior obiektów które 
> dostarcze z aplikacji. Np. dostarcze tam (obiekt?) Options z ktorego 
> wyczyta co wyklikał user w GUI. Dostanie rowneż Output który będzie miał 
> metody printujące w konsoli GUI w Aplikacji.

To, bym zrobił tak że importowałbym plik .py jako moduł i wywoływałbym
jakąś tam funkcję z tego modułu przekazując mu odpowiednie obiekty.

Wadą jest absolutny brak bezpieczeństwa, tj skrypt napisany przez usera
ma absolutnie całkowity dostęp do bebechów twojej aplikacji i może
zrobić coś wbrew twoim intencjom.

> 
> b) chciałbym miec całkowitą kontrolę nad skryptem, mogę go w dowolnym 
> momencie wylączyć. Idealem było by gdybym mógł go równiez zatrzymac i 
> wznowić.

To możnaby było zrobić albo w postaci osobnego procesu, który byś po
prostu ubił.

> 
> c) absolutnie znakomite było by gdyby mechanizm udostepniał pracę 
> krokowa skryptu. W Aplikacji bylo by coś w rodzaju 
> script().doNextStatement() w pętli. Wyglądalo by to troche jak 
> koprocedura. I idealnie bez normalnego stosu tak aby nie musiało to 
> lecieć w osobnym wątku.

Co do tego się nie wypowiem bo nie wiem.

p. m.
Re: Python w pythonie ale nie w oczywisty sposób
#28639
Author: Sebastian Biały
Date: Sat, 17 Feb 2018 12:33
31 lines
2441 bytes
On 2/17/2018 1:18 PM, m wrote:
> To, bym zrobił tak że importowałbym plik .py jako moduł i wywoływałbym
> jakąś tam funkcję z tego modułu przekazując mu odpowiednie obiekty.
> 
> Wadą jest absolutny brak bezpieczeństwa, tj skrypt napisany przez usera
> ma absolutnie całkowity dostęp do bebechów twojej aplikacji i może
> zrobić coś wbrew twoim intencjom.

Chcę tego uniknąc. W poprzednich rozwiązaniach JS był izolowany w 100%. 
Tutaj sprawe komplikuje fakt że to ten sam język. Chce kontrolowac jakie 
obiekty i jakie metody dostanie skrypt do pracy. Taki sandbox.

>> b) chciałbym miec całkowitą kontrolę nad skryptem, mogę go w dowolnym
>> momencie wylączyć. Idealem było by gdybym mógł go równiez zatrzymac i
>> wznowić.
> To możnaby było zrobić albo w postaci osobnego procesu, który byś po
> prostu ubił.

Nie. Taki proces ubity w niewlasciwym miejscu może powodowac 
interesujące skutki uboczne. Dodatkowo musze wtedy korzystać z jakiegoś 
RMI. Przerost formy.

>> c) absolutnie znakomite było by gdyby mechanizm udostepniał pracę
>> krokowa skryptu. W Aplikacji bylo by coś w rodzaju
>> script().doNextStatement() w pętli. Wyglądalo by to troche jak
>> koprocedura. I idealnie bez normalnego stosu tak aby nie musiało to
>> lecieć w osobnym wątku.
> Co do tego się nie wypowiem bo nie wiem.

Mogę uzyć stackless Pythona, ale doświadczenie jest drogie do 
przeprowadzenia, stad pytanie.
Re: Python w pythonie ale nie w oczywisty sposób
#28640
Author: AK
Date: Sat, 17 Feb 2018 13:07
38 lines
2625 bytes
Użytkownik "m" <mvoicem@gmail.com> napisał:

> To, bym zrobił tak że importowałbym plik .py jako moduł i wywoływałbym
> jakąś tam funkcję z tego modułu przekazując mu odpowiednie obiekty.
>
> Wadą jest absolutny brak bezpieczeństwa, tj skrypt napisany przez usera
> ma absolutnie całkowity dostęp do bebechów twojej aplikacji i może
> zrobić coś wbrew twoim intencjom.

Mozna ta funkcje (czy caly skrypt poprzez import) wywolac
poprzez eval czy exec podajac mu scope
eval(expression[, globals=None[, locals=None])
exec(object[, globals=None[, locals=None]])
i wtedy bezpieczenstwo pelne.

Mozna tez uzyc ktoregosc ze sprawdzonym pakietow plugino-owych
(a jest ich od groma - nie moge polecic najlepszegop bo.. zwyczajnie nie mam
 w nich duzego doswiadczenia. Po prostu eval/exec ze scopem zawsze mi poki co wystarczal).
Np.
https://pypi.python.org/pypi/Yapsy  - mysle ze ten az zanadto starczy
http://pluginbase.pocoo.org/
https://pypi.python.org/pypi/extensions
Lub samego modzic np tak/na podstawie tego (ale po co?:):
http://blog.mathieu-leplatre.info/a-very-simple-and-stupid-plugin-system-in-python.html
http://www.arl.army.mil/arlreports/2014/ARL-CR-0743.pdf
https://pypi.python.org/pypi/simple_plugins
https://github.com/thodnev/pluginlib/blob/master/pluginlib.py

>> b) chciałbym miec całkowitą kontrolę nad skryptem, mogę go w dowolnym
>> momencie wylączyć. Idealem było by gdybym mógł go równiez zatrzymac i
>> wznowić.
>
> To możnaby było zrobić albo w postaci osobnego procesu, który byś po
> prostu ubił.

Wystarczy watek, czy nawet zwykla korutyna.

AK 
Re: Python w pythonie ale nie w oczywisty sposób
#28641
Author: AK
Date: Sat, 17 Feb 2018 13:31
6 lines
1164 bytes
Update:
No i o OpenStack-owym stevedore zaponialem:
https://pypi.python.org/pypi/stevedore
ale to chyba zbyt duzy kaliber w stosunku do potrzeb.

AK
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads