[Python] Data uit socket tonen als output

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ariën  -
Beheerder

- Ariën -

03/11/2017 19:43:32
Quote Anchor link
Zijn er hier mensen die ervaring hebben met het verwerken van data in Python?

Ik heb dus een mooi Python-script wat via ZeroMQ een datastroom binnenhaalt (treinposities), en dat werkt perfect, en ik krijg om de tien seconden een mooie XML-feed binnen in het text-bestand. Maar dat moet ook zonder het schrijven van een bestand kunnen.

Op het huidige moment wordt constant de data in de ZeroMQ-datastroom weggeschreven naar een bestand.
Nu wil ik dit realtime kunnen outputten op een webservertje, en ik dacht zelf aan de PyBottle-plugin om een mini-webserver op te zetten.

Echter... hoe krijg ik de XML-feed van het huidige moment daarin te zien?

Hopelijk zijn er hier mensen die Python-kennis hebben, en snappen wat ik bedoel. Of als iemand het beter zou kunnen dan dit, let me know.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/env python2
from gzip import GzipFile
from cStringIO import StringIO
from subprocess import call
import zmq

context = zmq.Context()

subscriber = context.socket(zmq.XSUB)
subscriber.connect("tcp://pubsub.*******.nl:7664")
subscriber.send(chr(0x01) + "/RIG/NStreinpositiesInterface5") # 0x01 = subscribe, 0x00 = unsubscribe


x=0

while True:

        multipart = subscriber.recv_multipart()
        address = multipart[0]
        contents = ''.join(multipart[1:])
        contents = GzipFile('','r',0,StringIO(contents)).read()
        filename="tmp/treinpos.txt"
        file = open(filename,"w")
        file.write(contents)
        file.close()

subscriber.close()
context.term()
Gewijzigd op 03/11/2017 19:44:48 door - Ariën -
 
PHP hulp

PHP hulp

19/04/2024 19:22:03
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/11/2017 10:31:37
Quote Anchor link
Je kan ook hetzelfde in PHP doen lijkt mij?
 
- Ariën  -
Beheerder

- Ariën -

04/11/2017 10:34:01
Quote Anchor link
Waarom zou je twee programmeertalen gebruiken als het ook met eentje zou moeten kunnen? Ook ik wil eens wat meer dan PHP leren ;-)
Gewijzigd op 04/11/2017 10:34:24 door - Ariën -
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/11/2017 11:07:25
Quote Anchor link
Uhm ja twee talen door elkaar gebruiken zou ik ook geen voorstander van zijn als daar niet een verdomd goede reden voor is. En ja natuurlijk als je zin hebt om een andere taal te leren dan is dat goed om te doen. Maar ik dacht Ariën heeft vast al een dijk van een PHP applicatie staan ;-)
 
- Ariën  -
Beheerder

- Ariën -

04/11/2017 19:36:23
Quote Anchor link
Ik voer dit script uit op een andere server dan die van mijn webserver, en daar draait ook een andere open-source Python-applicatie op met sockets werkt. Maar dat ziet er wat complexer uit.... ;-)

Uiteindelijk verwerk ik het wel in PHP. Maar het gaat eropm dat ik gewoon de XML-content realtime kan ophalen.
 
Aad B

Aad B

05/11/2017 10:35:08
Quote Anchor link
Frank Nietbelangrijk op 04/11/2017 10:31:37:
Je kan ook hetzelfde in PHP doen lijkt mij?
Oplossingen worden te vaak en zonder nadenken gerealiseerd met het programmeertaaltje dat men kent. Lang niet altijd met de programmeertaal die het meest geschikt is voor de toepassing. Python is veel geschikter en kan veel sneller opdrachten af handelen dan PHP. Ik heb ook wel PHP oplossingen op mijn bureau gekregen die ik probleemloos met een eenvoudig Unix/Linux command script kon oplossen. Waarom PHP in een cron job zetten als je het op kan lossen met Unix/Linux command script of Python? Doorgaans vanwege gebrek aan kennis en inzicht in deze andere programmeertalen. Soms kan het niet anders omdat de gehuurde omgeving te simpel is, men kan niet bij het operatingsystem en er zijn alleen wat van die onhandige webtools zoals phpadmin en dergelijke beschikbaar. Dan moet je alles wel met PHP regelen.....
 
- Ariën  -
Beheerder

- Ariën -

06/11/2017 13:02:39
Quote Anchor link
True, maar zijn er Python ervaringsdeskundigen hier die een oplossing voor mijn idee hebbn?
Volgens mij hoeft het niet eens heel lastig te zijn.

Als ik eens wist waarop ik moest zoeken, dan had ik het mogelijk wel kunnen vinden.
Gewijzigd op 06/11/2017 13:03:03 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

28/11/2017 10:56:14
Quote Anchor link
Update'je: Inmiddels ben ik bezig om te kijken naar Flask. Hiermee kan je een webserver in Python opzetten waarbij deze via de CLI als webserver wordt opgestart, en dus niet vanuit het script. Of het werkt, dat zullen we snel genoeg zien. Het schijnt zelfs beter dan Bottle te zijn, lees ik her en der.
 
Bart V B

Bart V B

28/11/2017 11:56:41
Quote Anchor link
Misschien dat ik te moeilijk zit te denken of dat ik over je probleem heen lees, maar wat is nu precies het probleem? Flask heeft inderdaad een webservertje aan boord, maar dat is net zoals bij php een ontwikkelserver en niet echt bedoeld om daar een applicatie op te laten draaien. Dan zal je toch flask weer aan een echter webserver moeten knopen. Denk daarbij aan lighttp, apache e.d.

is/was je uiteindelijke probleem niet dat je niet weet hoe je een XML feed moet uitlezen met python?
 
- Ariën  -
Beheerder

- Ariën -

28/11/2017 12:10:52
Quote Anchor link
Het punt is gewoon dat ik een ZeroMQ-stream aangeleverd krijg met XML, en dat ik die recente data via een webservertje wil outputten. Misschien dat iemand nog een beter advies heeft binnen Python, als Flask niet de beste oplossing zou zijn? Het continu schrijven van bestanden met een interval van 10 sec. lijkt mij niet echt een prettige performance leveren.

Zelf heb ik op diezelfde server al een Nginx-server draaien, dus ik dacht er zelf aan om met de proxy-configuratie daarin die Python-webserver aan te roepen via de (fictieve) URL: http://services.website.nl/locaties_api

Die XML lees ik verder uit met PHP, maar dat gebeurt op een andere server en valt buiten de scope van dit vraagstuk. En ja, dat Python-script blijft op een andere server uitgevoerd worden. Daar wil ik niet omheen draaien ;-)
Gewijzigd op 28/11/2017 12:15:00 door - Ariën -
 
Bart V B

Bart V B

28/11/2017 12:46:41
Quote Anchor link
Hoe jij de situatie wil is helemaal aan jou natuurlijk.
Het ging er mij om dat, net zoals php flask zo'n zelfde optie er in heeft zitten om een develop servertje op te zetten. Als alles uiteindelijk werkt, dan is het wel van belang dat je daar een "echte" webserver aan je applicatie knoopt. Met welk python framework je aan de gang gaat is ook niet van belang.
Immers is het aan jou om te kijken welk framework jou het beste bevalt.

Als je uiteindelijk alles klaar hebt dan kan je de Nginx server makkelijk gebruiken om je applicatie te laten draaien: http://flask.pocoo.org/docs/0.12/deploying/uwsgi/
 
- Ariën  -
Beheerder

- Ariën -

28/11/2017 13:13:44
Quote Anchor link
Ik ga er zeker naar kijken!

Toevoeging op 29/11/2017 08:29:55:

Soms is het gemakkelijker om het roer om te gooien. Met NodeJS heb je al een webserver ineen, en met een paar extra modules kan je al een ZMQ-socket uitlezen.

Dat is dus de nieuwe inslag die ik gemaakt heb. En tot nu toe werkt die best lekker.
Het is dan geen PHP, maar toch een programmeertaal waar ik mij prettiger bij voel. ;)

Nu nog even uitzoeken hoe gzip ermee om gaat.
Gewijzigd op 29/11/2017 08:32:17 door - Ariën -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.