# dades que arriben abans del script

Arguments de la terminal en Python

Igual que a C, un script pot rebre paraules escrites just després del seu nom a la terminal — a Python, totes arriben juntes en una sola llista.

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

NomValor

sys.argv

Terminal

Pas 1 / 1

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?