Section author: Vedran Miletić
Python: parametri i funkcije ovisni o sustavu¶
module sys
(službena dokumentacija) nudi pristup objektima koje interpreter koristi i s kojima komunicira
Zadatak
Pokrenite interpreter Pythona 3 u terminalu ili u razvojnom okruženju i učitajte modul sys
.
Otkrijte kojeg su tipa objekti
sys.ps1
isys.ps2
.Promijenite im vrijednost na drugu vrijednost po vašem izboru. Što uočavate? Fora, ha? ;-)
sys.version
je verzija interpretera Pythona i program prevoditelja kojim je preveden, npr.'3.8.1 (default, Jan 22 2020, 06:38:00) \n[GCC 9.2.0]'
ili'3.7.6 (default, Jan 2 2020, 01:19:56) \n[Clang 6.0.1 (tags/RELEASE_601/final 335540)]'
sys.platform
je platforma (operacijski sustav), npr.'linux'
ili'freebsd12'
sys.modules
je rječnik učitanih modulasys.getdefaultencoding()
vraća najčešće'utf-8'
(slučajevima kad nije tako se ovdje nećemo baviti)sys.getfilesystemencoding()
vraća najčešće'utf-8'
(slučajevima kad nije tako se ovdje nećemo baviti)sys.getsizeof(object)
vraća veličinu objektaobject
u bajtovimasys.int_info
daje informacije o načinu spremanja cijelih brojevasys.maxsize
daje informacije o maksimalnoj duljini liste (list
), uređene n-torke (tuple
), skupa (set
) ili rječnika (dict
)sys.exit([status])
izlazi iz interpretera s povratnim kodomstatus
raspon povratnih kodova (izlaznih statusa) je 0–127 i 129–192
postoje pokušaji standardizacije značenja svakog pojedinog broja, primjerice
sysexits.h
primjerice, naredba
man
ima izlazni status 0 nakon izlaska iz pregledavanja neke stranice tipkomq
, izlazni status 1 i porukuWhat manual page do you want?
u slučaju da nije navedeno ime stranice te izlazni status 16 u slučaju da stranica ne postoji ili ne postoji u navedenom odjeljku
u ljusci
bash
varijabla ljuske$?
sadrži izlazni status i može se ispisati naredbomecho $?
sys.argv
je lista argumenata proslijeđenih Python skripti kod pokretanjaargv[0]
je ime Python skripteargv[1]
,argv[2]
, … su redom prvi, drugi, … argument naveden nakon imena skripteprimjerice, pokrenemo li Python skriptu na način
./program.py -x -z foo bar baz
, tada ćeargv
biti sadržaja['./program.py', '-x', '-z', 'foo', 'bar', 'baz']
pa ćeargv[0]
biti'./program.py'
, aargv[1]
,argv[2]
, …,argv[5]
redom'-x'
,'-z'
,'foo'
,'bar'
,'baz'
Zadatak
Napišite Python skriptu imena zadatak-argv.py
koja će nakon što je iz naredbenog retka pozovemo s argumentom corona
(./zadatak-argv.py corona
ili python3 zadatak-argv.py corona
) ispisati:
Pozvali ste skriptu imena zadatak-argv.py s argumentom corona
, pri čemu suzadatak-argv.py
icorona
vrijednosti varijabli.Ako je prvi argument jednak
pythonversion
, onda će taj program pored toga ispisati verziju Python interpretera kojeg koristimo, u našem slučaju'3.8.1'
.Ako je prvi argument jednak
compilerversion
, onda će taj program ispisati verzi GCC-a kojom je korišteni Python interpreter preveden, u našem slučaju'GCC 9.2.0'
.
(Uputa: razmislite kako ćete iz sys.version
izvući vrijednosti koje vam trebaju.)
Zadatak
Modificirajte program iz prethodnog zadatka tako da:
U slučaju da korisnik unese nedozvoljnu vrijednost prvog argumenta skripta na standardni izlaz za greške ispisuje poruku o tome, a zatim završava izvođenje (izlazi iz interpretera) s izlaznim statusom 1.
U slučaju da korisnik unese manje ili više argumenata skripta na standardni izlaz za greške ispisuje poruku o tome, a zatim završava izvođenje (izlazi iz interpretera) s izlaznim statusom 2.
(Uputa: Pogledajte u pomoći za funkciju print()
kako ispisati sadržaj na standardni izlaz za greške).
Zadatak
Napišite vlastiti cat
, odnosno Python skriptu imena zadatak-cat.py
koja će nakon što je iz naredbenog retka pozovemo s argumentom imena datoteke ispisati sadržaj datoteke (primjerice, ako želimo ispisati sadržaj datoteke /etc/fstab
, to ćemo napraviti pozivom ./zadatak-cat.py /etc/fstab
ili python3 zadatak-cat.py /etc/fstab
). (Uputa: podsjetite se kako se čita sadržaj datoteke u Pythonu.)
Omogućite da vaša naredba prima argument -n
(npr. ./zadatak-cat.py -n /etc/fstab
ili python3 zadatak-cat.py -n /etc/fstab
) i tada ispisuje broj linije uz svaku liniju koju ispiše, slično kako to radi naredba cat
s parametrom -n
. U slučaju da korisnik ne unese -n
, naredba ispisuje samo sadržaj datoteke bez brojeva linija. (Uputa: podsjetite se kako se cijepa tekst po linijama da možete na svaku dodati broj.)
opisnik datoteke (engl. file descriptor) je cjelobrojni indeks u tablici otvorenih datoteka vezanih uz proces
svaki proces ima barem 3 opisnika: standardni ulaz, standardni izlaz i standardni izlaz za greške
objekt
sys.stdin
reprezentira standardni ulaz (opisnik 0)objekt
sys.stdout
reprezentira standardni izlaz (opisnik 1)objekt
sys.stderr
reprezentira standardni izlaz za greške (opisnik 2)
naredba
lsof
ispisuje popis otvorenih datoteka na sustavulsof -p pid
ispisuje popis datoteka koje je otvorio proces s PID-ompid
Zadatak
Isprobajte funkciju
sys.stdout.write()
i objasnite na koji način radi različito odprint()
. Prima li više od jednog argumenta? Dodaje li znak za novi redak na kraju ispisa? Možete li ispisati listu, cijeli ili realan broj?Otvorite u Python interpreteru proizvoljnu datoteku iz vašeg direktorija. Pronađite u popisu otvorenih datoteka na sustavu vaš proces, 3 osnovna opisnika i opisnik te datoteke.