2 Ağustos 2018 Perşembe

begins python ile programlama'ya giris

Python veya herhangi bir dil ile komut satırı tabanlı basit uygulamalar geliştirken bile yazılımcıları uğraştıran bir takım işlemler var. Python için __name__ bazlı boilterplate kodlar, komut satırı argümanlarına args[...] ile ulaşma, ortam değişkenlerine erişme  bunlardan bazıları. Bunların hepsini harici bir kütüphane kullanmadan çözmek elbet de mümkün fakat begins ile bu işlemleri çok daha kolay yapabiliyoruz.



begins paketini pip ile kurmak tahmin edeceğiniz gibi çok basit:

pip install begins

Ardından kendi kendini açıklayan aşağıdaki örnek koda bakabiliriz:

import begin

@begin.start
def run(ad="Murat", soyad="Yildirim", renk="mavi"):
    print ad, soyad, renk

begin.start decorator'u ile ana fonksiyonumuzu işaretliyoruz. bu fonksiyona geçirdiğimiz parametlere ise artık komut erişebiliriz. örneğin:

python beginsdeneme.py --ad burak --soyad celik --renk kirmizi

ile ektra koda ihtiyaç duymadan bu parametreleri değiştirebiliriz.

benzer şekilde:
import begin

@begin.start(env_prefix="begins_")
def run(ad="Murat", soyad="Yildirim", renk="mavi"):
    print ad, soyad, renk

şeklinde env_prefix'i kullanırsak artık bu değişkenleri işletim sisteminin ortam değişkenlerinden de okutabiliriz. Özellikle upstart ve systemd gibi servis yöneticileri üzerinden bu scriptleri yapılandırmamız gerektiğinde ektra kod kalabalığına gerek duymadan bunu başarabilmek büyük avantaj.

örnek systemd konfigurasyonu şu şekilde olabilir

nano /etc/systemd/system/begins.deneme.service
[Unit]
Description=beginsdeneme
Requires=local-fs.target network-online.target
After=local-fs.target network-online.target


[Service]
Environment=ad=burak
Environment=soyad=yildirim
Environment=renk=turuncu
Type=simple
ExecStart=/usr/bin/python /root/beginsdeneme.py
WorkingDirectory=/root
Restart=always
RestartSec=10
LimitNOFILE=500000
LimitNPROC=500000
 
 

[Install]
WantedBy=multi-user.target

Ubuntu 14 için örnek upstart yapılandırması ise şöyle

nano /etc/init/beginsdeneme.config
description "beginsdeneme"

env ad=berk
env soyad=kacar
env renk=siyah

start on runlevel [2345]
stop on runlevel [!2345]

respawn
post-stop exec sleep 5
limit nofile 65000 65000


setuid root

chdir /root
exec /usr/bin/python beginsdeneme.js

begins in logging dahil bir çok ek özelliği de var. Boyutu oldukça ufak bir kütüphane olan begins'in python ile program geliştirmeye katkısı olduça büyük.

Hiç yorum yok:

Yorum Gönder

hmm