A Byte of Python

El mòdul sys

El mòdul sys conté funcionalitats específiques del sistema. Ja hem vist que la llista sys.argv conté els arguments de la línia de comandes.

Arguments de la línia de comandes

Example 14.1. Ús de sys.argv

				
#!/usr/bin/python
# Filename: cat.py

import sys

def readfile(filename):
	'''Escriu un fitxer per la sortida estàndard.'''
	f = file(filename)
	while True:
		line = f.readline()
		if len(line) == 0:
			break
		print line, # atenció a la coma
	f.close()

# El programa comença aquí
if len(sys.argv) < 2:
	print 'No action specified.'
	sys.exit()

if sys.argv[1].startswith('--'):
	option = sys.argv[1][2:]
	# elimina els primers dos caràcters de sys.argv[1]
	if option == 'version':
		print 'Version 1.2'
	elif option == 'help':
		print '''\
This program prints files to the standard output.
Any number of files can be specified.
Options include:
  --version : Prints the version number
  --help    : Display this help'''
	else:
		print 'Unknown option.'
	sys.exit()
else:
	for filename in sys.argv[1:]:
		readfile(filename)
				
				

Sortida

				
$ python cat.py
No action specified.

$ python cat.py --help
This program prints files to the standard output.
Any number of files can be specified.
Options include:
  --version : Prints the version number
  --help    : Display this help

$ python cat.py --version
Version 1.2

$ python cat.py --nonsense
Unknown option.

$ python cat.py poem.txt
Programming is fun
When the work is done
if you wanna make your work also fun:
        use Python!
				
				

Com funciona

El programa emula la comanda cat tan coneguda pels usuaris de Linux/Unix. Simplement cal especificar els noms dels fitxers de text i el programa mostrarà el seu contingut per la sortida estàndard.

Quan s'executa un programa Python en mode no interactiu, sempre hi ha un element com a mínim a la llista sys.argv. Es tracta del nom del programa en execució i està disponible a sys.argv[0] (recordem que Python comença a comptar a partir del 0). La resta dels arguments apareixen a continuació d'aquest.

Per a fer el programa més amigable, he afegir certes opcions que permeten a l'usuari obtenir més informació respecte al programa. Aquestes opcions poden estar especificades al primer argument. Si ens indiquen l'opció --version, el programa mostra el número de la versió del programa. En cas de que l'usuari especifiqui l'opció --help, el programa mostra una petita explicació del seu funcionament. Fem servir la funció sys.exit per a finalitzar l'execució del programa. Com sempre, podem trobar tots els detalls a help(sys.exit).

Quan no s'especifica cap opció, i hi ha noms de fitxer a la línia de comandes, el programa simplement escriu totes les línies de cada fitxer en l'ordre especificat a la línia de comandes.

Per cert, el nom de la comanda cat és una abreviació de concatenate (concatenació) que és bàsicament el que el programa fa: mostra el contingut d'un fitxer o concatena dos o més fitxers junts a la sortida.

Més de sys

La cadena sys.version ens ofereix informació respecte la versió que tenim instal·lada de Python. La tupla sys.version_info ens ofereix una manera fàcil de tractar les parts dels nostres programes que són específiques per una determinada versió de Python.

			
[swaroop@localhost code]$ python
>>> import sys
>>> sys.version
'2.3.4 (#1, Oct 26 2004, 16:42:40) \n[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)]'
>>> sys.version_info
(2, 3, 4, 'final', 0)
			
			

Per als programadors experimentats, el mòdul sys inclou altres elements interessants, com ara sys.stdin, sys.stdout i sys.stderr que es corresponen amb l'entrada estàndard, la sortida estàndard i la sortida estàndard d'error respectivament.