diff --git a/skypy/pipeline/driver.py b/skypy/pipeline/driver.py
index e834c00..36872d8 100644
--- a/skypy/pipeline/driver.py
+++ b/skypy/pipeline/driver.py
@@ -22,7 +22,7 @@ class SkyPyDriver:
     and using their results to generate variables and tables.
     '''
 
-    def execute(self, configuration, file_format=None):
+    def execute(self, configuration, file_format=None, overwrite=False):
         r'''Run a pipeline.
 
         This function runs a pipeline of functions to generate variables and
@@ -38,6 +38,8 @@ class SkyPyDriver:
             File format used to write tables. Files are written using the
             Astropy unified file read/write interface; see [2]_ for supported
             file formats. If None (default) tables are not written to file.
+        overwrite : bool
+            Whether to overwrite any existing files without warning.
 
         Notes
         -----
@@ -131,7 +133,7 @@ class SkyPyDriver:
         if file_format:
             for table in table_config.keys():
                 filename = '.'.join((table, file_format))
-                getattr(self, table).write(filename)
+                getattr(self, table).write(filename, overwrite=overwrite)
 
     def _call_from_config(self, config):
 
diff --git a/skypy/pipeline/scripts/skypy.py b/skypy/pipeline/scripts/skypy.py
index f1a6e2b..763a5eb 100644
--- a/skypy/pipeline/scripts/skypy.py
+++ b/skypy/pipeline/scripts/skypy.py
@@ -44,10 +44,12 @@ def main(args=None):
     import yaml
 
     parser = argparse.ArgumentParser(description="SkyPy pipeline driver")
-    parser.add_argument('-c', '--config', required=True,
-                        type=argparse.FileType('r'), help='Config file name')
+    parser.add_argument('config', type=argparse.FileType('r'),
+                        help='Config file name')
     parser.add_argument('-f', '--format', required=False,
                         choices=['fits', 'hdf5'], help='Table file format')
+    parser.add_argument('-o', '--overwrite', action='store_true',
+                        help='Whether to overwrite existing files')
 
     # get system args if none passed
     if args is None:
@@ -57,5 +59,5 @@ def main(args=None):
     config = yaml.safe_load(args.config)
     config = {} if config is None else config
     driver = SkyPyDriver()
-    driver.execute(config, file_format=args.format)
+    driver.execute(config, file_format=args.format, overwrite=args.overwrite)
     return(0)

Rerun yaml file requires to delete the output files
**Describe the bug**
Re-running `.yaml ` files returns an error with the message that the output files already exist. 

**To Reproduce**
```
skypy -c examples/herbel_galaxies.yaml -f fits
```
```
skypy -c examples/herbel_galaxies.yaml -f fits
```

**Expected behavior**
It should run without problems and updating the output files.

diff --git a/skypy/pipeline/tests/test_driver.py b/skypy/pipeline/tests/test_driver.py
index 84d8a18..4231f08 100644
--- a/skypy/pipeline/tests/test_driver.py
+++ b/skypy/pipeline/tests/test_driver.py
@@ -21,13 +21,14 @@ def test_driver():
 
     # Generate a simple two column table with a dependency. Also write the
     # table to a fits file and check it's contents.
+    size = 100
     config = {'tables': {
                 'test_table': {
                   'column1': {
                     'module': 'numpy.random',
                     'function': 'uniform',
                     'kwargs': {
-                      'size': 100}},
+                      'size': size}},
                   'column2': {
                     'module': 'numpy.random',
                     'function': 'uniform',
@@ -36,11 +37,24 @@ def test_driver():
 
     driver = SkyPyDriver()
     driver.execute(config, file_format='fits')
-    assert len(driver.test_table) == 100
+    assert len(driver.test_table) == size
     assert np.all(driver.test_table['column1'] < driver.test_table['column2'])
     with fits.open('test_table.fits') as hdu:
         assert np.all(Table(hdu[1].data) == driver.test_table)
 
+    # Check for failure if output files already exist and overwrite is False
+    driver = SkyPyDriver()
+    with pytest.raises(OSError):
+        driver.execute(config, file_format='fits', overwrite=False)
+
+    # Check that the existing output files are modified if overwrite is True
+    new_size = 2 * size
+    config['tables']['test_table']['column1']['kwargs']['size'] = new_size
+    driver = SkyPyDriver()
+    driver.execute(config, file_format='fits', overwrite=True)
+    with fits.open('test_table.fits') as hdu:
+        assert len(hdu[1].data) == new_size
+
     # Check for failure if 'column1' requires itself creating a cyclic
     # dependency graph
     config['tables']['test_table']['column1']['requires'] = \
diff --git a/skypy/pipeline/tests/test_skypy.py b/skypy/pipeline/tests/test_skypy.py
index b64656d..eb44563 100644
--- a/skypy/pipeline/tests/test_skypy.py
+++ b/skypy/pipeline/tests/test_skypy.py
@@ -15,20 +15,20 @@ def test_skypy():
         skypy.main(['--help'])
     assert e.value.code == 0
 
-    # Missing required argument '-c'
+    # Missing positional argument 'config'
     with pytest.raises(SystemExit) as e:
         skypy.main(['--format', 'fits'])
     assert e.value.code == 2
 
     # Invalid file format
     with pytest.raises(SystemExit) as e:
-        skypy.main(['--config', 'config.filename', '--format', 'invalid'])
+        skypy.main(['--format', 'invalid', 'config.filename'])
     assert e.value.code == 2
 
     # Process empty config file
     filename = get_pkg_data_filename('data/empty_config.yml')
-    assert skypy.main(['--config', filename]) == 0
+    assert skypy.main([filename]) == 0
 
     # Process test config file
     filename = get_pkg_data_filename('data/test_config.yml')
-    assert skypy.main(['--config', filename]) == 0
+    assert skypy.main([filename]) == 0

pip install -e .[test]
parse_log_pytest
pytest
pytest pytest-cov pytest-xdist pytest-mock pytest-asyncio
apt-get update apt-get install -y gcc
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
astropy==4.3.1
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
coverage==7.2.7
exceptiongroup==1.2.2
execnet==2.0.2
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
hypothesis==6.79.4
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
networkx==2.6.3
numpy==1.21.6
packaging @ file:///croot/packaging_1671697413597/work
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyerfa==2.0.0.3
pytest==7.1.2
pytest-arraydiff==0.6.1
pytest-astropy==0.11.0
pytest-astropy-header==0.2.2
pytest-asyncio==0.21.2
pytest-cov==4.1.0
pytest-doctestplus==1.0.0
pytest-filter-subpackage==0.1.2
pytest-mock==3.11.1
pytest-remotedata==0.4.1
pytest-xdist==3.5.0
PyYAML==6.0.1
scipy==1.7.3
-e git+https://github.com/skypyproject/skypy.git@157009b007761e06991b72e0ccb09dbed071d401#egg=skypy
sortedcontainers==2.4.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zipp @ file:///croot/zipp_1672387121353/work

name: skypy
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - astropy==4.3.1
      - coverage==7.2.7
      - exceptiongroup==1.2.2
      - execnet==2.0.2
      - hypothesis==6.79.4
      - networkx==2.6.3
      - numpy==1.21.6
      - pyerfa==2.0.0.3
      - pytest-arraydiff==0.6.1
      - pytest-astropy==0.11.0
      - pytest-astropy-header==0.2.2
      - pytest-asyncio==0.21.2
      - pytest-cov==4.1.0
      - pytest-doctestplus==1.0.0
      - pytest-filter-subpackage==0.1.2
      - pytest-mock==3.11.1
      - pytest-remotedata==0.4.1
      - pytest-xdist==3.5.0
      - pyyaml==6.0.1
      - scipy==1.7.3
      - skypy==0.1.dev128+g157009b
      - sortedcontainers==2.4.0
prefix: /opt/conda/envs/skypy

skypy/pipeline/tests/test_driver.py::test_driver skypy/pipeline/tests/test_skypy.py::test_skypy
skypy/pipeline/scripts/skypy.py skypy/pipeline/driver.py
skypy/pipeline/scripts/skypy.py skypy/pipeline/driver.py