sys.argv
El mòdul sys exposa argv: una llista amb totes les paraules escrites a la terminal.
Capçalera
import sys
Exemple d'execució
$ python3 saluda.py hola món
Amb aquesta crida, sys.argv val ["saluda.py", "hola", "món"]: sys.argv[0] és el nom de l'script (amb el qual s'ha invocat), sys.argv[1] = "hola", sys.argv[2] = "món". Compara-ho amb C: aquí no cal cap argc a part — len(sys.argv) ja et diu quants n'hi ha.
Recórrer els arguments
for i, arg in enumerate(sys.argv):
print(f"argv[{i}] = {arg}")
enumerate() dona alhora l'índex i el valor — la manera idiomàtica de recórrer una llista quan necessites tots dos, en lloc de portar un comptador a mà com faries a C.
Convertir-los a nombres
Igual que a C, tots els elements de sys.argv són cadenes de text.
a = int(sys.argv[1]) # "5" -> 5 x = float(sys.argv[2]) # "3.14" -> 3.14
Res de nou aquí: són les mateixes int() i float() que ja coneixes. A diferència de l'atoi() de C, si el text no és un número vàlid, Python no retorna 0 en silenci: llança un ValueError (que ja saps capturar amb try/except, del capítol de condicionals).
Validar que n'hi ha prou
Accedir a sys.argv[2] quan l'usuari només n'ha escrit un provoca un IndexError. Cal comprovar la llargada abans.
if len(sys.argv) < 3:
print(f"Ús: {sys.argv[0]} <a> <b>")
sys.exit(1)
sys.exit(1) és l'equivalent de return 1; a main() en C: atura el programa a l'instant i li diu a la terminal que alguna cosa ha anat malament.
Mira el programa rebre arguments pas a pas
La primera línia del terminal simula la crida des de la consola; la resta és el que l'script mateix va imprimint.
Arguments bàsics
Validació
Codi
Variables
| Nom | Valor |
|---|
sys.argv
Terminal
Problemes per resoldre
Sense solució ni comprovació automàtica: escriu l'script, executa'l (python3 programa.py) i prova'l des de la terminal amb els arguments de l'exemple. Les pistes són plegades perquè les obris només si les necessites.
1. Saluda per argument
Escriu un script que rebi un nom com a argument i saludi. Si no se li passa cap argument, mostra un missatge d'ús.
$ python3 saluda.py Jordi Hola, Jordi! $ python3 saluda.py Ús: saluda.py <nom>
Pistes
Comprova len(sys.argv) abans de tocar sys.argv[1]: si és menor que 2, encara no hi ha cap nom.
2. Suma de diversos arguments
Escriu un script que sumi tots els arguments rebuts (poden ser-ne 2, 5, o cap), no només dos de fixos.
$ python3 suma.py 3 5 8 1 Suma: 17
Pistes
sys.argv[1:] ja et dona la llista sencera sense sys.argv[0] — una llesca que et saltes el nom del programa d'un sol cop, sense cap bucle amb índexs.
Converteix cada element amb int() i suma'ls (per exemple, amb sum() i una comprensió de llista: sum(int(x) for x in sys.argv[1:])).
3. Compta i majúscula
Mostra quants arguments ha rebut l'script (sense comptar sys.argv[0]) i mostra'ls tots en majúscules.
$ python3 mostra.py hola món 2 arguments: HOLA MÓN
Pistes
El nombre d'arguments propis és len(sys.argv) - 1.
Per a les majúscules, paraula.upper() ja ho fa tot en una crida — i, a diferència del toupper() de C, funciona bé amb accents com "ó".
Exercicis d'autoavaluació
Aquests es generen amb valors nous a l'atzar i tenen solució comprovable.
Quina serà la sortida per terminal d'aquest programa?