diff --git a/cadetrdm/cli_integration.py b/cadetrdm/cli_integration.py
index 32815ac4ac1f2235764228d7aee5fb7cbe012adb..0a7299318079b2d7d7d7b301a0b0d50875d28256 100644
--- a/cadetrdm/cli_integration.py
+++ b/cadetrdm/cli_integration.py
@@ -1,3 +1,6 @@
+import shlex
+import subprocess
+
 import click
 
 from .repositories import ProjectRepo
@@ -47,6 +50,26 @@ def fill_data_from_cadet_rdm_json(re_load=False):
     repo.fill_data_from_cadet_rdm_json(re_load=re_load)
 
 
+@cli.command()
+@click.argument('file_name')
+@click.argument('results_commit_message')
+def run_python_file(file_name, results_commit_message):
+    repo = ProjectRepo(".")
+    repo.enter_context()
+    subprocess.run(["python", file_name])
+    repo.exit_context(results_commit_message)
+
+
+@cli.command()
+@click.argument('command')
+@click.argument('results_commit_message')
+def run_command(command, results_commit_message):
+    repo = ProjectRepo(".")
+    repo.enter_context()
+    subprocess.run(shlex.split(command))
+    repo.exit_context(results_commit_message)
+
+
 @cli.command()
 @click.option('--output_repo_name', default="output",
               help='Name of the folder where the tracked output should be stored. Optional. Default: "output".')