Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
other:python:misc_by_jyp [2021/06/30 17:20] – jypeter | other:python:misc_by_jyp [2021/07/06 13:49] – [Using command-line arguments] added getopt, optparse and argparse jypeter |
---|
</WRAP> | </WRAP> |
| |
* Reading/setting environments variables\\ <code>>>> os.environ['TMPDIR'] | ==== Reading/setting environments variables ==== |
| |
| |
| <code>>>> os.environ['TMPDIR'] |
'/data/jypmce/climafcache' | '/data/jypmce/climafcache' |
>>> os.environ.get('SCRATCHDIR', '/data/jypmce/some_scratch_stuff') | >>> os.environ.get('SCRATCHDIR', '/data/jypmce/some_scratch_stuff') |
</code> | </code> |
| |
* Generating (aka //raising//) an error. This will stop the script, unless it is called in a function, and the code calling the function explicitely catches and deals with errors | ==== Generating (aka raising) an error ==== |
| |
| This will stop the script, unless it is called in a function, and the code calling the function explicitely catches and deals with errors |
* <code>raise RuntimeError('\n\nOMG! An error! :-(\nAborting script...')</code> | * <code>raise RuntimeError('\n\nOMG! An error! :-(\nAborting script...')</code> |
* [[https://docs.python.org/3/tutorial/errors.html|Errors and Exceptions tutorial]] | * [[https://docs.python.org/3/tutorial/errors.html|Errors and Exceptions tutorial]] |
* [[https://docs.python.org/3/library/exceptions.html|Built-in Exceptions reference]] | * [[https://docs.python.org/3/library/exceptions.html|Built-in Exceptions reference]] |
| |
* Stopping a script\\ <code>sys.exit('Some optional message about why we are stopping')</code> | |
| |
* Checking if a file/directory is writable by the current user\\ <code>>>> os.access('/', os.W_OK) | ==== Stopping a script ==== |
| |
| A user can use ''CTRL-C'' or ''kill'' to stop a script, or ''CTRL-Z'' to suspend it temporarily (use ''fg'' to resume a suspended script). The code below can be used by the script itself to interrupt its execution, instead of raising an error |
| |
| <code>sys.exit('Some optional message about why we are stopping')</code> |
| |
| |
| ==== Checking if a file/directory is writable by the current user ==== |
| |
| <code>>>> os.access('/', os.W_OK) |
False | False |
>>> os.access('/home/jypmce/.bashrc', os.W_OK) | >>> os.access('/home/jypmce/.bashrc', os.W_OK) |
True</code> | True</code> |
| |
| ==== Using command-line arguments ==== |
| |
| === The extremely easy but non-flexible way: sys.argv === |
| |
| The name of a script, the number of arguments (including the name of the script), and the arguments (as strings) can be accessed through the ''sys.argv'' strings' list |
| |
| Simple ''argv_test.py'' test script: |
| <code>#!/usr/bin/env python |
| import sys |
| nb_args = len(sys.argv) |
| print('Number of script arguments (including script name) =', nb_args) |
| for idx, val in enumerate(sys.argv): |
| print(idx, val)</code> |
| |
| <code>$ python argv_test.py |
| Number of script arguments (including script name) = 1 |
| 0 argv_test.py |
| |
| $ python argv_test.py tas tas_tes.nc |
| Number of script arguments (including script name) = 3 |
| 0 argv_test.py |
| 1 tas |
| 2 tas_tes.nc</code> |
| |
| === The C-style way: getopt === |
| |
| Use [[https://docs.python.org/3/library/getopt.html|getopt]] (//C-style parser for command line options//) |
| |
| === The deprecated Python way: optparse === |
| |
| [[https://docs.python.org/3/library/optparse.html|optparse]] (//parser for command line options//) is **deprecated since Python version 3.2**! You should now use argparse (check [[https://docs.python.org/3/library/argparse.html#upgrading-optparse-code|Upgrading optparse code]] for converting from ''optparse'' to ''argparse'') |
| |
| === The current Python way: argparse === |
| |
| [[https://docs.python.org/3/library/argparse.html|argparse]] (//parser for command-line options, arguments and sub-commands//) is available since Python version 3.2 |
| |
/* | /* |
* tip template\\ <code>Some code</code> | ==== Tip template ==== |
| |
| <code>Some code</code> |
*/ | */ |
| |