Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Python w pythonie ale nie w oczywisty sposób

29 views
Skip to first unread message

Sebastian Biały

unread,
Feb 17, 2018, 3:36:18 AM2/17/18
to
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

m

unread,
Feb 17, 2018, 7:18:22 AM2/17/18
to
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.

Sebastian Biały

unread,
Feb 17, 2018, 7:33:49 AM2/17/18
to
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.

AK

unread,
Feb 17, 2018, 8:08:25 AM2/17/18
to
Użytkownik "m" <mvo...@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

AK

unread,
Feb 17, 2018, 8:32:34 AM2/17/18
to
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
0 new messages