Ez a modul a Python futásidejű környezettel való kommunikációra, annak lekérdezésére és módosÃtására szolgál
Az argv lista tartalmazza a programnak átadott paramétereket – ebbÅ‘l a nulladik a futtatott program neve.
# File: sys_program_parameterek_hasznalata_01.py import sys print "A futtatott program neve:", sys.argv[0] if len(sys.argv) > 1: print "Kaptunk ", len(sys.argv)-1, "parametert:" for arg in sys.argv[1:]: print arg else: print "Nincsenek tovabbi parameterek!"
# File: sys_program_parameterek_hasznalata_01.out A futtatott program neve: J:\htdocs\Py_LIB_site\examples\sys_program_p arameterek_hasznalata_01.py Nincsenek tovabbi parameterek!
Ha a program a szabványos bemenetről származik, pl.
python < sys-argv-example-1.py
, a program neve üres karakterlánc lesz.
A path lista tartalmazza azokat a könyvtárneveket, ahol a Python modulokat keres (Python nyelvű modulok, lefordÃtott modulok vagy bináris kiegészÃtéseket). Ez a lista több beépÃtett szabály alapján keletkezik a Python indÃtásakor, a PYTHONPATH környezeti változóból és Windows-on a registry tartalmából. Mivel a path lista egy teljesen szokványos lista, módosÃtani tudod Å‘ket a programodból:
# File: sys_modulok_keresesi_utvonalanak_modositasa.py import sys print "A path lista ", len(sys.path), "elembol all" # egy konyvtar hozzaadasa a modulok keresesi utvonalahoz sys.path.insert(0, "teszt") try: import teszt_modul # a modul kiirja, hogy SZIA KEDVES OLVASO print "az importalas sikerult" except: print "az importalas nem sikerult" # kitoroljuk a listat sys.path = [] # a Python sajat random moduljat SEM tudjuk importalni, mert a lista teljesen ures. import random # hopsza!
# File: sys_modulok_keresesi_utvonalanak_modositasa.out A path lista 13 elembol all Szia kedves olvaso! az importalas sikerult Traceback (most recent call last): File "H:\htdocs\Py_LIB_site\examples\sys_modulok_keresesi_utvona lanak_modositasa.py", line 18, in ? import random # hopsza! ImportError: No module named random
# File: sys_beepitett_modulok_megkeresese.py import sys # print sys.builtin_module_names def dump(module): print module, "=>", if module in sys.builtin_module_names: print "Beepitet modul!" else: # az __import__ utasitas hivodik meg, amikor az import-ot hasznaljuk. # module = __import__(module) print "nincs benne a beepitett modulok listajaban, file: ", print module.__file__ return module dump("os") dump("sys") dump("string") dump("strop") module = dump("zlib") print "erdekesseg - milyen tulajdonsagai vannak egy modul objektumnak?" print dir(module) # itt a __XX__ tipusu objektumtulajdonsagok 'gyari' modul tulajdonsagok.
# File: sys_beepitett_modulok_megkeresese.out os => nincs benne a beepitett modulok listajaban, file: C:\Python24 \lib\os.pyc sys => Beepitet modul! string => nincs benne a beepitett modulok listajaban, file: C:\Pyth on24\lib\string.pyc strop => Beepitet modul! zlib => nincs benne a beepitett modulok listajaban, file: C:\Python 24\DLLs\zlib.pyd erdekesseg - milyen tulajdonsagai vannak egy modul objektumnak? ['DEFLATED', 'DEF_MEM_LEVEL', 'MAX_WBITS', 'ZLIB_VERSION', 'Z_BEST_COM PRESSION', 'Z_BEST_SPEED', 'Z_DEFAULT_COMPRESSION', 'Z_DEFAULT_STRATEG Y', 'Z_FILTERED', 'Z_FINISH', 'Z_FULL_FLUSH', 'Z_HUFFMAN_ONLY', 'Z_NO_ FLUSH', 'Z_SYNC_FLUSH', '__doc__', '__file__', '__name__', '__version_ _', 'adler32', 'compress', 'compressobj', 'crc32', 'decompress', 'deco mpressobj', 'error']
A modules szótár minden betöltött modult tartalmaz. Az import utasÃtás ellenÅ‘rzi ezt, mielÅ‘tt bármit is betöltene.
A következÅ‘ példában jól látható, hogy a Python a program indÃtása elÅ‘tt jópár modult elÅ‘re betölt:
# File: sys_importalt_modulok_kilistazasa.py import sys # a pelda windows-on futott le print sys.modules.keys()
# File: sys_importalt_modulok_kilistazasa.out ['copy_reg', 'locale', '__main__', 'site', '__builtin__', 'encodings.c p1250', 'encodings', 'os.path', 'encodings.codecs', 'ntpath', 'UserDic t', 'encodings.exceptions', 'nt', 'stat', 'zipimport', 'warnings', 'en codings.types', '_codecs', 'sys', 'codecs', 'types', '_locale', 'signa l', 'linecache', 'encodings.aliases', 'exceptions', 'os']
Egy objektumra mutató hivatkozások megszámlálása
A getrefcount függvény az objektumra mutató hivatkozások számával tér vissza - vagyis hogy hány helyen használják a hivatkozáslekérdezés pillanatában az objektumot. Ha ez az érték 0-ra csökken, az objektum megsemmisül. FONTOS: ez az érték mindig magasabb, mint a valós hivatkozásszámláló értéke, mert maga a lekérdezési folyamat is használja - s Ãgy növeli - a változó értékét.
# File: sys_egy_objektumra mutato_hivatkozasok_megszamlalasa.py
# File: sys_egy_objektumra mutato_hivatkozasok_megszamlalasa.out
A sys.platform változó az oprendszer azonosÃtóját tartalmazza. A Windows alapú rendszerek neve win32, a Macintosh azonosÃtója mac. A Unix rendszerek változatosabbak: irix6, linux2, vagy unos5 (Solaris), vagy egyéb...
# File: sys_milyen_oprendszeren_fut_a_program.py import sys # az "import os.path" utanzasa pathmodule = "-" if sys.platform == "win32": import ntpath pathmodule = ntpath elif sys.platform == "mac": import macpath pathmodule = macpath else: # ha nem a fenti ketto, feltelelezzuk hogy ez egy posix platform import posixpath pathmodule = posixpath print pathmodule
# File: sys_milyen_oprendszeren_fut_a_program.out <module 'ntpath' from 'C:\Python24\lib\ntpath.pyc'>
# File: sys_szabvanyos_bemenet_atiranyitasa_kimenetre.py #! /bin/python.exe import sys for line in sys.stdin: # a bemenetet soronkent a kimenetre irjuk: sys.stdout.write(line.upper())
# File: sys_szabvanyos_bemenet_atiranyitasa_kimenetre.out $ echo 'vadalma' | sys_szabvanyos_bemenet_atiranyitasa_kimenetre.py VADALMA
A helyzet az, hogy e sorok Ãrásakor az effbot.org-on lévÅ‘ példát én sem értettem, mármint hogy pontosan mi mit csinál - ezért szétszedem, megvizsgálom - hogy megértsem. (ui: a példa végiggondolása és feldolgozása után már értem, hogy mi történik. B.)
# File: sys_szabvanyos_bemenet_kimenet_vizsgalata.py import sys import string def azonositas(objektum, objektum_nev): print "%s" % objektum_nev, "id:", id(objektum) class Atiranyitas: def __init__(self, stdout): self.stdout = stdout print "Atiranyitas parameterkent kapott sys.stdout id-je:", id(self.stdout), "\n" def write(self, s): self.stdout.write(string.upper(s)) # a szabvanyos kimenet atiranyitasa (igy a print utasitase is!) old_stdout = sys.stdout azonositas(old_stdout, "old_stdout") azonositas(sys.stdout, "sys.stdout") # a ket azonositas kimeneten lathato, hogy ugyanaz az id-juk, ugyanarra az objektumra hivatkozik a ket nev. sys.stdout = Atiranyitas(sys.stdout) azonositas(sys.stdout, "sys.stdout, Redirect utan") print "Piroska es a farkas", print "Fanni kedvenc meseje", "\n"*2 # restore standard output sys.stdout = old_stdout print "Micimacko!" # ami tortent: a sys.stdout-nak van egy write metodusa. # csinaltunk egy uj objektumot, aminek ugyanolyan write metodusa van - # es a sys.stdout-ra torteno kesobbi hivatkozasok valojaban az uj objektumra mutatnak, # ami feldolgozza a kapott adatokat, es a VALODI SYS.STDOUT-NAK TOVABBITJA-TOVABBITHATJA oket.
# File: sys_szabvanyos_bemenet_kimenet_vizsgalata.out old_stdout id: 10215528 sys.stdout id: 10215528 Atiranyitas parameterkent kapott sys.stdout id-je: 10215528 SYS.STDOUT, REDIRECT UTAN ID: 10645952 PIROSKA ES A FARKAS FANNI KEDVENC MESEJE Micimacko
A függvénynek opcionális paraméterként egy szám adható, mely visszaadódik a hÃvó programnak. A kilépÅ‘ kódokról részletes leÃrás olvasható itt.
# File: sys_exit_kilepes_a_programbol.py import sys print "szia" sys.exit(1) # kilepes, a hivo program 1-es visszateresi erteket kap. # a 0 kilepesi ertek rendszerint normalis (nem hiba miatti) programfutas befejezest jelent print "ez mar nem nyomtatodik ki"
# File: sys_exit_kilepes_a_programbol.out szia
Az előző példa nem emeli ki, de a sys.exit() a kilépést nem a program azonnali abbahagyásával éri el - valójában SystemExit kivételdobás történik. Ez viszont - a többi kivételdobáshoz hasonlóan, elkapható.
# File: sys_exit_kiveteldobasanak_elkapasa.py import sys print "szia" try: sys.exit(1) # itt kiveteldobas tortenik, amit az except azonnal elkap except SystemExit: print "SystemExit kiveteldobas tortent" print "Es meg ez is kinyomtatodik - vagyis a program futasa NEM ert veget a sys.exit()-nel!"
# File: sys_exit_kiveteldobasanak_elkapasa.out sziaSystemExit kiveteldobas tortent Es meg ez is kinyomtatodik - vagyis a program futasa NEM ert veget a s ys.exit()-nel!
# File: sys_kilepo_fuggveny_keszitese.py import sys def kilepeskor_teendok(): print "takaritok, atmeneti munkafajlokat torlom, figyelmezteto mailt kuldok" sys.exitfunc = kilepeskor_teendok print "Szia" sys.exit(1) print "ez soha nem lesz kinyomtatva"
# File: sys_kilepo_fuggveny_keszitese.out Sziatakaritok, atmeneti munkafajlokat torlom, figyelmezteto mailt kuld ok
A 2.0-ás Pythontól kezdÅ‘dÅ‘en az atexit modullal több kilépÅ‘ függvényt is készÃthetsz.
You must be logged in to post a comment.