A one liner to get all drivers (GDAL + OGR) (more or less 210 drivers)

```bash
python -c "from osgeo import gdal;print('\n'.join(sorted([gdal.GetDriver(i).GetDescription() for i in range(gdal.GetDriverCount())])))"
```

You can also filter drivers to get only GDAL one using the following (or you will not get the same number of drivers output as `gdal_translate --formats` e.g 136 on my machine)

```
from osgeo import gdal 

all_driver_names = [gdal.GetDriver(i).GetDescription() for i in range(gdal.GetDriverCount())] 
gdal_driver_names = [
    ' - '.join([
        gdal.GetDriverByName(driver_name).ShortName, # Get short name
        ','.join([i.replace('DCAP_', '').lower() for i in  ['DCAP_RASTER', 'DCAP_VECTOR'] if gdal.GetDriverByName(driver_name).GetMetadataItem(i) == 'YES']), # Get if driver support raster and vector or only raster
        gdal.GetDriverByName(driver_name).LongName # Get Long name
    ]) for driver_name in all_driver_names
    if gdal.GetDriverByName(driver_name).GetMetadataItem('DCAP_RASTER') == 'YES']

print('\n'.join(gdal_driver_names))
```

My example returns something like `GTiff - raster - GeoTIFF` whereas the exact output in `gdal_translate --formats` is `GTiff -raster- (rw+vs): GeoTIFF`. What is missing in my code is how to get the read/write/vsi/... capabilities.

To understand how to get read write capabilities, you can look at C++ code to understand the complete rules https://github.com/OSGeo/gdal/blob/d0a12d1a74e08557605f57cf2d94dac82b9fdda9/gdal/gcore/gdal_misc.cpp#L3088.

For example, to get the info about `r` (read) https://github.com/OSGeo/gdal/blob/d0a12d1a74e08557605f57cf2d94dac82b9fdda9/gdal/gcore/gdal_misc.cpp#L3106, you need in Python, to check if ` gdal.GetDriverByName(driver_name).GetMetadataItem('DCAP_OPEN') == 'YES'` and if OK, add `'r'` letter