5 Eylül 2015 Cumartesi

Python TCP threading stream(bz2)

import socket
import thread


def run(clientsock,addr):
    "Burada kesinlikle karşılaştırma, sorgu veya koşul eklemeyinz(yanıt süreniz uzar)"
    try:
          
        a=clientsock.recv(BUFF)
                                   
        status = '200 OK'
        clientsock.send('HTTP/1.0 200 OK\r\n')
        clientsock.send('Content-type:application/x-bzip2\r\n')
        clientsock.send('Access-Control-Allow-Origin:*\r\n\r\n')
           
        clientsock.send(sıkılştırılmış_bz2_json_içerik)
        
        clientsock.close()
    except Exception,e:print e
   
class _main(): #CGI+ALL THREAD
    def run(self,salla):
        ADDR = (HOST, PORT)
        serversock = socket(AF_INET, SOCK_STREAM)
        serversock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
        serversock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
        serversock.bind(ADDR)
        serversock.listen(10)
        While True :
            try:
                #Burada kime yetki verecekseniz ona göre thread açın
                thread.start_new_thread(run, (clientsock, addr))

                   
            except Exception,e:print "thr start error :",e
           
if __name__ == "__main__":
    ma_in = _main()
    thread.start_new_thread(ma_in.run,(None,))

Python wsgi bz2 content (stream)

from wsgiref.util import setup_testing_defaults
from wsgiref.simple_server import make_server
import bz2

def simple_app(environ, start_response):

    status = '200 OK'
    headers = [('Content-type', 'application/x-bzip2')]

    start_response(status, headers)

    word = ""
    for key, value in environ.iteritems():
        word += "%s: %s\n" % (key, value)
   
          
    ret = bz2.compress(word)
    return ret

httpd = make_server('', 8000, simple_app)
print "Serving on port 8000..."
httpd.serve_forever()

Python basit hafıza oyunu (Tkinter)

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

import os
import thread,time
import random

import math

try:
    dirs = os.path.dirname(os.__file__).lower()
    if "python2" in dirs:
        from Tkinter import *
    elif "python3" in dirs:
        from tkinter import *
except Exception,e : print e

LARGE_FONT = ("Verdana",20)
color = 0

root = Tk()
frame = Frame(root)
root.title("Very Hard Memory Game !")
root.geometry("200x200")
root.resizable(0, 0)

Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
frame.grid(row=0, column=0, sticky=N + S + E + W)
grid = Frame(frame)
grid.grid(sticky=N + S + E + W, column=0, row=8, columnspan=2)
Grid.rowconfigure(frame, 8, weight=1)
Grid.columnconfigure(frame, 0, weight=1)

class _zo : pass
zo = _zo()
zo.foo = []
zo.pick = None
zo.lq =[]
zo.a = {}
zo.level = 0
zo.lev_list = [4,9,16,25,36,49,64,81]
zo.miss = 0


def get_num(num):
    h = sorted(zo.a.keys())
    p = zo.foo.index(num)
    if num in zo.lq and num == zo.pick :
        zo.a["%0.2d_%d"%(p,num)].config(text=num, state="disabled")

        if len(zo.lq) > 1 :
            zo.lq.remove(num)
            zo.pick = ( random.choice(zo.lq))
            zo.a["my_lab"].config(text= "where is %d ?" % zo.pick)
        elif len(zo.lq) == 1:
            zo.lq = []
            zo.foo = []
            zo.pick = None
            zo.level = zo.level +1
            for s in zo.a.keys() :
                zo.a[s].destroy()
            zo.a = {}
            do_cube(zo.lev_list[zo.level])

   
    else:
        zo.miss += 1
        zo.a["my_lab"].config(text="Try again for (%d)!(Miss:%s)"%(zo.pick,zo.miss))   
       




def timot(hu):
    time.sleep(2)
    n = sorted(zo.a.keys())  

    for s in n :
        if not s.startswith("my"):
            y = zo.foo[n.index(s)]
            zo.a[s].config(text=y)
            time.sleep(1)
            zo.a[s].config(text="")
    zo.pick = random.choice(zo.foo)
    for j in n: zo.a[j].config(state="normal")
    zo.a["my_lab"].config(text="where is %d ?" %zo.pick)

def do_cube(many):
    bx = int(math.sqrt(many))
    w = (200+(200*(zo.level*0.15)))
    root.geometry("%dx%d+400+200" %(w,w+(20+(5*zo.level))))
   
   
    color = "orange","red","green","blue","yellow","brown","dodgerblue","pink"
    zo.foo  = random.sample(range(100),many)
    zo.lq = [e for e in zo.foo]

    for y in range(bx):
        for x in range(bx):
            ind = (x*bx) + y 
            rand_no = zo.foo[ind]
           
            butn = Button(frame, bg=color[x], command= lambda rand_no=rand_no:get_num(rand_no), font=LARGE_FONT,state="disabled")
            butn.grid(column=x, row=y, sticky=N + S + E + W)

            zo.a["%0.2d_%d"%(ind,rand_no)] = butn
           
    for x in range(bx):
        Grid.columnconfigure(frame, x, weight=1)
    for y in range(bx):
        Grid.rowconfigure(frame, y, weight=1)

    zo.a["my_lab"] = Label(root,text="ready !")
    zo.a["my_lab"].grid(column=0, row=bx+1, sticky=N + S + E + W,columnspan = bx)
   
   
    thread.start_new_thread(timot,(None,))


do_cube(zo.lev_list[zo.level])


root.mainloop()

2 Eylül 2015 Çarşamba

Python modbus RTU, ASCII , TCP-IP


Example scenario:


  1. Define a table
  2. Calculate CRC
  3. Convert to Byte Array
  4. Struct pack(only for tcp-ip)
Or buy some stuf on modbus.org , take unlimited python library.

py installer wxpython error (_core,_core_ etc.)

Şayet wx-2.8-gtk2-unicode modülünde herhangi bir probleminiz yoksa, varsa /usr/lib/python2.7/dist-packeges/ dizinindeki tüm wx dosyalarını silip tekrar kurun.

Aşağıdaki kütüphaneler objektif C dilini derlemesini sağlayacaktır.
    sudo apt-get install gobjc sudo apt-get install gnustep-devel
    Dosyayı indirin. dizine çıkarın,cd komutu ile dizine geçin,  make, sudo make install
    Dosyayı indirin , dizine çıkarın,cd komutu ile dizine geçin, make, sudo make install

     Pyinstaller devoloper indirin.

Dizine çıkarın ve pyinstaller-develop/bootloder dizinine geçin. 
Bu komutu uygulayın python ./waf configure build install

    Çıktı şöyle olacaktır :

    build install
    Linux-64bit detected
    Building LSB bootloader.
    Checking for program gcc or cc           : /usr/bin/gcc
    Checking for program cpp                 : /usr/bin/cpp
    Checking for program ar                  : /usr/bin/ar
    Checking for program ranlib              : /usr/bin/ranlib
    Checking for gcc                         : ok 
    Checking for program lsbcc               : /usr/local/bin/lsbcc
    Checking for LSB build tools >= 4.0      : LSB >= 4.0 is required




    pyinstaller ana dizinine geçip
    sudo python  setup.py install

    Şimdi gönül rahatlığı ile wx aplikasyonunuzu uygulamaya dönüştürebilirsiniz.

    pyinstalller --debug --onefile --window uygulamanız.py

    Uyarılar:  64bit Ubuntu 14.04 LTS de uygulanmıştır. Uygulama adınızda 'wx' kelimesini kullanmayınız..