Fer executables directes ======================== En UNIX, un fitxer text pot ser executable fent el següent: - Escrivint en la primera línia del text, l'intèrpret que executarà el text. Aquesta línia contindrà a l'inici els caràcters :code:`#!` per després posar el camí i el nom de l'executable que interpretarà el text. Per exemple, els guions de bash començaran:: #!/bin/bash - Canviar els indicadors del fitxer posant que sigui executable per tothom:: $ chmod +x fitxerExecutable - O bé, que sigui executable només pel usuari:: $ chmod u+x fitxerExecutable - La mateixa idea es podria fer per donar permisos de grup (:code:`g`) o tothom (:code:`a`) Per fer un executable de python 3 cal posar en el fitxer de python la primera línia:: #!/usr/bin/python3 Això funciona per *debian* i *ubuntu*. No tots els sistemes UNIX posen l´interpret python a :code:`/usr/bin/`. Per fer compatible el guió en altres sistemes que usen altres camins, s'usa el programa :code:`/usr/bin/env` que rep com a paràmetre l'intèrpret a executar. Si aquest és python3 la línia quedaria:: #!/usr/bin/env python3 Exemple: - Editem el fitxer :file:`exemple.py`:: #!/usr/bin/env python3 print('Hola tothom') - Escrivim en el terminal:: $ chmod +x exemple.py - Ara el podem executar directament:: $ ./exemple.py Hola tothom $ - Si escrivim:: $ export PATH=$PATH":." - bash cercarà també l'executable al directori de treball (":code:`.`"):: $ exemple.py Hola tothom $ Per treballar des del interpret de python i/o des del interpret de bash, el millor és organitzar el codi de python de la següent manera: - Editem el fitxer :file:`exemple.py`: .. code-block:: python def programa(): print('Hola tothom') if __name__ == "__main__": programa() - Editem el fitxer :file:`exemple` amb indicadors :code:`x`: .. code-block:: python #!/usr/bin/env python3 from exemple import programa if __name__ == "__main__": programa() - D'aquesta forma, podem fer en bash (si el PATH té en compte el directori de treball):: $ exemple Hola tothom $ - També:: $ python3 >>> from exemple import programa >>> programa() Hola tothom - Si no haguéssim posat la construcció :code:`if` en :file:`exemple.py`, un import en l'interpret de python executaria el programa en el moment de fer l'import.