![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Dostałem zadanie na zajęciach, mianowicie napisać w pythonie interfejs dla php. Dokładnie chodzi o to aby przekazywać z php parametry do pythona, który będzie coś z nimi robił i zwracał wyniki. Czy ktoś mógłby mi wyjaśnić w ogóle jak pisać api i rozwiązać komunikację między różnymi językami? Nigdy podobnego tematu nie ruszałem stąd te braki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Z góry thx za wszelkie wskazówki! |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Czy ktoś mógłby mi wyjaśnić w ogóle jak pisać api i rozwiązać komunikację między różnymi językami? Robisz skrypt wPHP dostosowany pod php-cli, czyli nie masz np. GET/POST, tylko argc/argv i w Pythonie po prostu przechwytujesz wyjście z polecenia. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Możesz równie dobrze z innego języka korzystać w ten sposób, żaden problem. ;] |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
ech jakoś to do mnie nie przemawia (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif)
może jeszcze raz... Mam stronę www z formularzem, na przykład: input, w którym podaję liczbę oraz przycisk submit. Z tego co napisałeś rozumiem, że podaną na stronie www liczbę muszę przekazać do pośredniczącego skryptu w php. Następnie ta zmienna powinna zostać przesłana do skryptu w pythonie. I tu jest problem bo tego właśnie nie wiem. Jak wywołać za pomocą języka php skrypt w pythonie i podać na jego wejście zmienną? |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Aha, czyli na odwrót. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Cytat języka php skrypt w pythonie i podać na jego wejście zmienną? Przyznam, że nie znam (jeszcze) Pythona, więc pozostaje mi na razie spekulować, że mógłbyś np. wyeksportować te zmienne do jakiegoś pliku (np. XML/WSDL) i w skrypcie Pythona go parsować. A odpalasz go przez zwykły exec" title="Zobacz w manualu PHP" target="_manual. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 6.04.2009 Skąd: Warszawa Ostrzeżenie: (10%) ![]() ![]() |
Możesz wyeksportować zmienne z php do pliku *.txt lub do bazy mysql.
A potem w pythonie pobrać te zmienne |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Możesz wyeksportować zmienne z php do pliku *.txt lub do bazy mysql. A potem w pythonie pobrać te zmienne Można, tylko pozostaje kwestia powiadomienia skryptu w pythonie, że takie dane tam umieściłem. Całkowicie odpada tu cron, gdyż skrypt musi zostać zainicjowany z php. @erix zaproponował użycie exec" title="Zobacz w manualu PHP" target="_manual do odpalenia skryptu python. Podałem na wejście parametry z jakimi ma program wystartować i działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , także odpadły tutaj sprawy z przekazywaniem danych przez db, pliki itp. Jednak zastanawia mnie czy można to zrobić jeszcze inaczej? Mimo wszystko używanie polecenia exec chyba nie jest bezpieczne... |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat że takie dane tam umieściłem A nie możesz po prostu sprawdzić, czy plik istnieje? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Cytat Jednak zastanawia mnie czy można to zrobić jeszcze inaczej? No, na plikach/cronem/etc. Cytat Mimo wszystko używanie polecenia exec chyba nie jest bezpieczne... Jeśli nie ubezpieczasz zmiennych przez escapeshellarg" title="Zobacz w manualu PHP" target="_manual, to nie jest. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 28.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam, Dostałem zadanie na zajęciach, mianowicie napisać w pythonie interfejs dla php. Dokładnie chodzi o to aby przekazywać z php parametry do pythona, który będzie coś z nimi robił i zwracał wyniki. Czy ktoś mógłby mi wyjaśnić w ogóle jak pisać api i rozwiązać komunikację między różnymi językami? Nigdy podobnego tematu nie ruszałem stąd te braki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Z góry thx za wszelkie wskazówki! Opakuj sobie po stronie PHP w jakąś klasę kilka wywołań xmlrpc, a po stronie Pythona napisz sobie (tips&tricks: napisałem Ci już poniżej) wielowątkowy serwer i masz komunikację. Kod #!/usr/bin/env python
# -*- coding: utf-8 -*- import SocketServer import SimpleXMLRPCServer IP_ADDRESS = '127.0.0.1' PORT = '6666' def do_request(args): print 'Args from PHP: %s' % args class AsyncXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer): """ Multi-thread implemantation. Threaded mix-in """ pass if __name__ == '__main__': # Register functions and run server. server = AsyncXMLRPCServer((IP_ADDRESS, PORT), SimpleXMLRPCServer.SimpleXMLRPCRequestHandler, allow_none=1) server.register_function(do_request, 'do_request') print 'Listing on %s port %d' % (IP_ADDRESS, PORT) server.serve_forever() Ten post edytował ska 6.08.2009, 17:23:51 |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
A po chorobę marnować zasoby na pakowanie wszystkiego w XML...?
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 28.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
A po chorobę marnować zasoby na pakowanie wszystkiego w XML...? Zapytaj się jego twórców? (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) A może XML został stworzony jako standard przechowywania i reprezentowania danych dla którego transpretne są platformy i języki? hmmm Może właśnie dlatego (oczywiście między innymi) jest wykorzystywany w rozszerzonej wersji RPC standardu RFC 1057? A może dlatego, że słowo API zazwyczaj niesie za sobą coś co się nazywa uniwersalność/standard/rozszerzalność? Rozumiem, że skoro tak mówisz, dyponujesz benchmarkami dla opakowania dumpowanych obiektów przez XML z wykorzystaniem procedur C; a może tylko powtarzasz zasłyszane głupoty typu "xml to złoo"? A nie możesz po prostu sprawdzić, czy plik istnieje? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) No, na plikach/cronem/etc. Bez jaj ma napisać API, nie księgę gości. Ten post edytował ska 7.08.2009, 08:58:54 |
|
|
![]()
Post
#12
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Rozumiem, że skoro tak mówisz, dyponujesz benchmarkami dla opakowania dumpowanych obiektów przez XML z wykorzystaniem procedur C; a może tylko powtarzasz zasłyszane głupoty typu "xml to złoo"? Nie mówię, że zło, tylko w tym konkretnym przypadku jest to niepotrzebny narzut - rozumiem - międzyplatformowo, ale na tym samym hoście, w jego konkretnym skrypcie lepiej po prostu strzelać czystym tekstem z jakimś separatorem albo w ostateczności przez JSON (napisanie jakiegoś prostego protokołu byłoby banalne). XML nie jest zły, ale w tym konkretnym zastosowaniu IMHO mocno przesadzony. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 28.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie mówię, że zło, tylko w tym konkretnym przypadku jest to niepotrzebny narzut - rozumiem - międzyplatformowo, ale na tym samym hoście, w jego konkretnym skrypcie lepiej po prostu strzelać czystym tekstem z jakimś separatorem albo w ostateczności przez JSON (napisanie jakiegoś prostego protokołu byłoby banalne). XML nie jest zły, ale w tym konkretnym zastosowaniu IMHO mocno przesadzony. A od kiedy pod poleceniem "zaprojektować API" kryje się skrypcik na jednym hoście ? Tutaj nie rozumiesz, zadaniem jest opracowanie API działającego w wiekszości popularnych środowisk i sytuacji, a nie dla jednego przykładu odpalanego na localhost. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 12 Dołączył: 27.01.2007 Skąd: north Poziom: 158 Tytuł: Miszcz Ostrzeżenie: (0%) ![]() ![]() |
Może zamiast XMLRPC, użyć RPC ?
Spróbuj Pipe'ami (proc_open), imo najlepsze rozwiązanie (tylko dopilnuj blokowania rurek ;] ). Możesz też użyć pamięci współdzielonej (prostsze od pipe'ów), semafor, plików w których będą zakolejkowane komendy, socketów do komunikacji między procesami, lub też ostatecznie przez parametry wywołania, ale ta ostatnia opcja jest nieplastyczna, bo przekazać instrukcje możesz tylko raz. Jest w czym wybierać. Wszystko ładnie opisane na google. Ten post edytował carbolymer 7.08.2009, 11:42:39 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 20:27 |