--- title: ASIX1 M03. 007. Treballar amb arguments des de línia de comandes. tags: asix, programació, arguments --- # ASIX1 M03: Programació bàsica [vincle a font en MarkDown](https://hackmd.io/@JdaXaviQ/HkxwkksVK) --- ## 007. Treballar amb arguments des de la línia de comandes. ### La matriu 'sys.argv'. Python posa a la nostra disposició una llibreria que ens permet accedir a paràmetres i funcions específics del sistema: el módul **'sys'** (System-specific parameters and functions). Una de les propietats públiques de 'sys' és **'sys.argv'**, que ens proporciona accés als arguments de la comanda de consola que ha provocat la execució del nostre programa. Ens retorna la informació en forma d'array, on el primer element sys.argv[0] és el nom del nostre script (depenen del sistema operatiu pot incloure la ruta complerta). La resta d'arguments són evidentment els altres elements de la matriu sys.argv[1:]. ```python= #!/usr/bin/python3 # -*- coding: utf-8 -*- import sys print (f"El notre programa és: {sys.argv[0]}") print (f"La resta d'arguments: {sys.argv[1:]}") ``` ```bash= $ python3 test.py Hola mundo cruel! >>> El notre programa és: test.py >>> La resta d'arguments: ['Hola', 'mundo', 'cruel!'] ``` #### Preservar els espais en blanc. Si volem preservar els espais en blanc i tractar-los com a part d'un únic argument, tenim 3 possibilitats. 1. Envoltar l'argument amb cometes simples. 2. Envoltar l'argument amb cometes dobles. 3. Precedir l'espai en blanc d'una barra invertida '\ '. ### Ús de llibreries per treballar amb la línia de comandes. Si necessitem escriure programes que facin ús intensiu dels paràmetres de la línia de comandes, recomano l'ús de la llibreria **argparse**, però no la explicaré en aquests document perquè queda fora de l'abast dels coneixements que necessitem en aquests moment. ### Exemples: 1. Escriu un programa que calculi la suma de 2 nombres que ha de rebre per paràmetre de línia de comandes: ```python= #!/usr/bin/python3 # -*- coding: utf-8 -*- """ * Suma dos nombres enters que rep des de la stdinput * """ import sys if len(sys.argv) < 3: print("Aquesta utilitat suma dos nombres de tipus 'int'.") print("Exemple d'utilització:") print("python3 suma.py 5 3") print("Torna-ho a provar.") quit() print(int(sys.argv[1]) + int(sys.argv[2])) quit() ``` ### Tasca: Escriviu un programa en python3 que reculli per paràmetres de línia de comandes dos nombres reals. El primer nombre correspon a la quantitat de diners que hem lliurat al caixer d'una botiga i el segon el preu de les coses que hem comprat. El programa ens ha de retornar el canvi, minimitzant la quantitat de monedes i billets que ens han de tornar. Per exemple si el programa rep els nombres 20 i 3.5, ens ha de donar la següent sortida per pantalla: ```bash= $ python3 canvi_compra.py 20 3.5 Entregat: 20€ Total ticket: 3.5€ 1 x bitllet de 10€ 1 x bitllet de 5€ 1 x moneda de 1€ 1 x moneda de 0.5€ -------------------- Total canvi: 16.5€ ```