Sys

Pardus-Linux.org | Wiki sitesinden

Git ve: kullan, ara

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""-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.