Sys
Pardus-Linux.org | Wiki sitesinden
Komut Satırı Parametreleri ile Çalışmak -sys.argv-
sys modülüne bağlı argv komutu ile komut satırında çalıştırdığımız bir yazılımımıza parametrelerle çalışma işlevi kazandırabiliriz.
Örneğin
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys
for i in sys.argv:
print i
içeriğine sahip Python dilinde yazılmış bir yazılımımız olsun. Burada import sys ile sys modülümüzü çağırdık ve for döngüsü ile sys.argv içeriğine atanan değerleri yazdırdık. Bu dosyayı çalıştırdığımızda (dosya adımız sysargvdenemesi olsun) :
guDa@baDibere Python $ ./sysargvdenemesi pardus linux org wiki ./sysargvdenemesi pardus linux org wiki
şeklinde bir çıktı verecektir. Eğer daha önce listeleri araştırdıysanız, buradan sys.argv[0] -> ./sysargvdenemesi, sys.argv[1] -> pardus, sys.argv[2] -> linux, sys.argv[3] -> org, sys.argv[4] -> wiki şeklinde olduğunu anlamış olmalısınız.
Şimdi başka bir uygulama yapalım. Mesela -a adı, -s soyadı, -n de okul numarasını belirtsin fakat değerlerden biri eksik ise hata verip çıktı vermesin.
#!/usr/bin/env python #-*- coding:utf-8 -*- import sys u = len(sys.argv) gir = sys.argv for i in range(u): if gir[i] == "-a" and i != u-1: if gir[i+1] == "-s" or gir[i+1] == "-n": print "HATA! -a seçeneğini belirtmediniz!" break else: ad = gir[i+1] elif gir[i] == "-s" and i != u-1: if gir[i+1] == "-a" or gir[i+1] == "-n": print "HATA! -s seçeneğini belirtmediniz!" break else: so = gir[i+1] elif gir[i] == "-n" and i != u-1: if gir[i+1] == "-a" or gir[i+1] == "-s": print "HATA! -n seçeneğini belirtmediniz!" break else: no = gir[i+1] try : if ad and so and no: print ad, so, no except: pass
Burada yine import sys ile sys modülü çağırdık. sys.argv içindeki nesnelerin sayısını u değişkenine atadık. Daha sonra da her tarafa sys.argv yazmayalım diye gir değişkenini sys.argv değişkeni olacak şekilde tanımladık. Bundan sonra, u değişkeninin sınırları içerisinde kalacak şekilde sırasıyla gir[i] 'ye rastgelen parçacığın "-a" mı "-s" mi yoksa "-n" mi olduğunu kontrol ettik ve bunu kontrol ederken i != u-1 ile bizim son parçacığımız olmamasına özen gösterdik. Diyelim ki "-a" parçacığımızı buldu -hem de son parçacık değil-, hemen "-a" dan sonra gelen parçacığın "-s" ya da "-n" olup olmadığını kontrol ediyoruz. Eğer "-s" ya da "-n" den biri ise diyoruz ki hata var, çünkü bize -a nın ne olduğunu söylemedin. Eğer değilse ad değişkenine gir[i+1] değerini atıyoruz. En sonda da eğer ad, soyad ve no değişkenlerinin tamamı tanımlanmışsa yazdırmasını istiyoruz. Yoksa zahmet etmene gerek yok yazma diyoruz.
Bunu çalıştıracak olursak :
guDa@baDibere Python $ ./sysargv -a Erdem -s ARTAN -n 20522044 Erdem ARTAN 20522044 guDa@baDibere Python $ ./sysargv -a Erdem -s -n 20522044 HATA! -s seçeneğini belirtmediniz!
şeklinde bir çıktı alırız. Tabii bu yazılımda ufak bir hata ya da eksik var -bakalım bulabilecek misiniz =) -
İşletim Sistemi Bazlı İşlemler sys.platform
Python'da yazılımımızın hangi işletim sisteminde çalıştırıldığını anlaması için sys.platform kodunu kullanırız. Örneğin:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys
if sys.platform == "linux2":
print "Doğru Yoldasınız"
elif sys.platform == "mac":
print "Yoldan biraz sapmışsınız"
elif sys.platform == "win32":
print "Çok tehlikeli bir yola girdiniz. Bence üşenmeyin Pardus kurun."
kodlarını Linux ortamında çalıştırdığınızda "Doğru Yoldasınız", Mac ortamında çalıştırdığınızda "Yoldan biraz sapmışsınız", Windows ortamında çalıştırdığınızda ise "Çok tehlikeli bir yola girdiniz. Bence üşenmeyin Pardus kurun." yazısını çıktı olarak verecektir. Şaka bir yana -her şakanın bir ciddi yanı vardır ki benimkinin bayağı var-, sys.platform ile işletim sistemlerine özel dizin işlemlerini yapabilir, sadece bir işletim sisteminde çalışan modüllerin başka işletim sistemlerinde çağrılıp yazılımınızın hata vermesini engelleyebilir ve buna benzer birçok işletim sistemi bazlı işlemde kullanabilirsiniz.
