[Python] jaka jest praktyczna strona zastosowania?

Tutaj umieszczamy tematy związane z językami programowania niepasującymi do innych działów.
Regulamin forum
Temat prosimy poprzedzić nazwą języka umieszczonego w nawiasach kwadratowych np. [Pascal].
SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

[Python] jaka jest praktyczna strona zastosowania?

Postautor: SuperGość » poniedziałek 01 maja 2017, 08:17

Jak w temacie, ponieważ nie jestem programista ale lubię co nieco poznawać od czasu do czasu, to mam pytanie właśnie, jakie jest praktyczne na dzień dzisiejszy zastosowanie Pythona?

StaryAnoda

Re: [Python] jaka jest praktyczna strona zastosowania?

Postautor: StaryAnoda » poniedziałek 01 maja 2017, 08:30

Wielki coś wspominał, że używa do testów jednostkowych (ale nie wiem czy dobrze zapamiętałem)

Awatar użytkownika
mokrowski
User
User
Posty: 190
Rejestracja: czwartek 08 paź 2015, 20:50
Lokalizacja: Tam gdzie Centymetro

Re: [Python] jaka jest praktyczna strona zastosowania?

Postautor: mokrowski » poniedziałek 01 maja 2017, 18:40

Witryny internetowe https://www.djangoproject.com/ , analiza danych https://www.analyticsvidhya.com/blog/20 ... scratch-2/ wraz z szybkim tworzeniem analiz i rozwiązań (ten notebook to fajne narzędzie.. ) https://jupyter.org/ kliknij sobie "Try" jeśli trochę znasz Python'a a jeśli nie to zobacz co można zrobić: http://nbviewer.jupyter.org/ , testy (Także dla embedded ... jedno z narzędzi do testowania) https://www.froglogic.com/ , wszelkiego rodzaju "kleje" w aplikacjach... do łączenia i automatyzacji modułów.
A zresztą co się będę produkował...
https://www.python.org/about/apps/
,,Myślenie nie jest łatwe, ale można się do niego przyzwyczaić" - Alan Alexander Milne: Kubuś Puchatek

Awatar użytkownika
PROTON
Expert
Expert
Posty: 527
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Re: [Python] jaka jest praktyczna strona zastosowania?

Postautor: PROTON » środa 03 maja 2017, 18:01

Ja pythona używam do wszystkiego drobnego, trzeba coś zrobić jednorazowo to używam właśnie niego.
Zmajstrowałem coś takiego:

Kod: Zaznacz cały

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib, urllib2, cookielib
from HTMLParser import HTMLParser
import sys



class loginParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.sid = ""

    def handle_starttag(self, tag, attrs):
        if tag == 'input':
            if ('name', 'sid') in attrs:
                for k,v in attrs:
                    if k == 'value':
                        self.sid = v

    def get_sid(self):
        return self.sid

class messagesParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.automat = 0
        self.headerMessage = ""
        self.timeMessage = ""
        self.textMessage = ""
        self.data = ""

        #AUTOMAT
        #0 - początek
        #1 - nagłówek (nick)
        #2 - koniec nagłówka
        #3 - czas
        #4 - koniec czasu
        #5 - tekst
        #- - koniec tekstu, wyświetlenie, kasowanie zmiennych, powrót do 0


    def get_data(self):
        return self.data

    def handle_starttag(self, tag, attrs):
        #print "Encountered a start tag:", tag ,attrs
        if tag == 'blockquote':
            self.textMessage += '"'

        if tag == 'div':
            if ('class', 'mchat-message-header') in attrs:
                self.automat = 1
            if ('class', 'mchat-text') in attrs:
                self.automat = 5


        if tag == 'span':
            if ('class', 'mchat-time') in attrs:
                self.automat = 3

    def handle_endtag(self, tag):
        #print "Encountered an end tag :", tag
        if tag == 'blockquote':
            self.textMessage += '"'
        if tag == 'li' and self.automat == 5:
            self.automat = 0
            m =  self.timeMessage+"\t"+self.headerMessage+"\t"+self.textMessage
            self.data += m+"\n"
            self.timeMessage = ""
            self.headerMessage = ""
            self.textMessage = ""

        if tag == 'span' and self.automat == 3:
            self.automat = 4

        if tag == 'a' and self.automat == 1:
            self.automat = 2

    def handle_data(self, data):
        #print "Encountered some data  :", data
        if self.automat == 1:
            self.headerMessage += data.strip()
        if self.automat == 3:
            self.timeMessage += data.strip()
        if self.automat == 5:
            self.textMessage += data.strip()



class client:
    def __init__(self, username, password):
        self.parser = loginParser()
        self.redirect = 'app.php/mchat/archive'
        self.action = 'http://microgeek.eu/ucp.php?mode=login'
        self.action_get = 'http://microgeek.eu/app.php/mchat/archive?start='
        self.cj = cookielib.CookieJar()
        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj))
        self.opener.addheaders =[('User-agent', ('Mozilla/4.0 (compatible; MSIE 6.0; ' 'Windows NT 5.2; .NET CLR 1.1.4322)'))]
        resp = self.opener.open(self.action)
        self.parser.feed(resp.read().decode('utf-8'))
       
        self.sid = self.parser.get_sid()

        self.login_data = urllib.urlencode({'username' : username, 'password' : password, 'autologin' : 'on',
            'redirect' : self.redirect, 'sid' : self.sid, 'login' : 'Zaloguj+si%C4%99'})
        print("login....")
        resp = self.opener.open(self.action, self.login_data)
        print("done...")
        self.parser.close()

    def get_data(self, page):
        resp = self.opener.open(self.action_get+str(page))
        mparser = messagesParser()
        mparser.feed(resp.read().decode('utf-8'))
        d = mparser.get_data()
        mparser.close()
        return d

if __name__ == "__main__":
   
    reload(sys)
    sys.setdefaultencoding('utf8')

    username = raw_input("login>")
    password = raw_input("password>")


    f = open('backupfile.txt', 'w')
    e = client(username, password)

    for i in xrange(6361,0,-1):
        f.write(e.get_data(50*i))
        print i

    f.close()
       



Efekt, zawartość tego pliku:
backupfile.txt.gz


Jest to kopia czatu zapisana w pliku.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Gott weiß ich will kein Engel sein.

Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: [Python] jaka jest praktyczna strona zastosowania?

Postautor: tasza » środa 03 maja 2017, 18:48

PROTON pisze:Ja pythona używam do wszystkiego drobnego, trzeba coś zrobić jednorazowo

no dokładnie tak, ale też do automatyzacji swojej programistycznej codzienności, bo ja z tych nieco leniwych - preparowanie danych w db do testów jednostkowych, sekwencyjne uruchamianie skryptów i wstępna analiza wyników, ot takie...
a pokaz prawdziwej siły Pythona to jest pakiet SB-Assembler, wspominałam już o tym narzędziu drzewiej :arrow: viewtopic.php?f=65&t=845" target="_blank
Małolata moja sobie w tym Minecraftowe konstrukcje robi, to jeden z tutoriali, jakie pracowicie przerabiałyśmy :arrow: http://www.instructables.com/id/Python- ... Minecraft/ murek czy ścianę na 1 tyś bloczków w górę i w bok robi się jednym poleceniem konsoli :)
poza tym interpreter Python jest dość łatwy do wbudowania we własny sofcik :arrow: https://micropython.org/ a to daje ogromne możliwości
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
PROTON
Expert
Expert
Posty: 527
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Re: [Python] jaka jest praktyczna strona zastosowania?

Postautor: PROTON » czwartek 04 maja 2017, 11:25

Dodam praktyczny przykład, kod znaleziony w sieci i dostosowany do moich potrzeb, jest to balancer logów syslog-a, z jednego źródła mamy dużo logów i parsery SIEM-a nie są w stanie wszystkich obsłużyć. Rozwiązaniem tego problemu było uruchomienie 2 instancji parserów na porcie 515 i 516 oraz balancera w Pythonie na porcie 514.

Kod: Zaznacz cały

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import SocketServer
import socket

HOST, PORT = "0.0.0.0", 514

filterList = ['debian', 'debianx',]


class psyslog_client:
    """Class UDP
    h - host (default localhost)
    p - port (default 514)
    """
    HOST = "127.0.0.1"
    PORT = 514
   
    def __init__(self, h=HOST, p=PORT):
        self.HOST = h
        self.PORT = p
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

   
    def send(self, message):
        self.sock.sendto(message, (self.HOST, self.PORT))
       

class SyslogUDPHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        data = bytes.decode(self.request[0].strip())
        socket = self.request[1]
        print( "%s : " % self.client_address[0], str(data))
        #balancing
        if data.split(' ')[3] in filterList:
            s1.send(data)
        else:
            s2.send(data)

if __name__ == "__main__":
   
    s1 = psyslog_client("127.0.0.1",515)
    s2 = psyslog_client("127.0.0.1",516)
   
    try:
        server = SocketServer.UDPServer((HOST,PORT), SyslogUDPHandler)
        server.serve_forever(poll_interval=0.5)
    except (IOError, SystemExit):
        raise
    except KeyboardInterrupt:
        print ("Crtl+C Pressed. Shutting down.")



Gott weiß ich will kein Engel sein.

SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

Re: [Python] jaka jest praktyczna strona zastosowania?

Postautor: SuperGość » środa 04 paź 2017, 12:04

Tak wróciłem do starego tematu i jeszcze raz przeczytałem, dziękuję za wszystkie odpowiedzi ale taka moja mała sugestia dla odpowiadających na tego typu proste i podstawowe pytania, pytający niekoniecznie jest na poziomie programistów wymiataczy (a jak jeszcze to na wstępie zaznacza), a wy odpowiadając może czasami mimowolnie używacie języka dla was w pełni zrozumiałego ale niekoniecznie jest tak w przypadku pytającego :D.
PROTON pisze:.... jest to balancer logów syslog-a, z jednego źródła mamy dużo logów i parsery SIEM-a nie są w stanie wszystkich obsłużyć. Rozwiązaniem tego problemu było uruchomienie 2 instancji parserów na porcie 515 i 516 oraz balancera w Pythonie na porcie 514.....

no i wszystko jasne :lol:

Awatar użytkownika
inż.wielki
User
User
Posty: 307
Rejestracja: niedziela 20 gru 2015, 23:11

Re: [Python] jaka jest praktyczna strona zastosowania?

Postautor: inż.wielki » środa 04 paź 2017, 19:50

Ja go używam do tego jeżeli muszę zrobić coś co można zautomatyzować. Dzięki pythonowi można nawet otwierać wirtualne przeglądarki i wypełniać strony, przydatne gdy np mamy 200-300 urządzeń i każde z nich należy zserializować a potem wpisać odpowiednie parametry na stronę www w/w urządzenia :)


Wróć do „Inne języki programowania”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości