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