In brief
subprocess.run() is the recommended high-level interface for starting a process. An argument list with the usual shell=False avoids constructing shell syntax around every value.
Useful to know
subprocess.run() is the recommended high-level interface for starting a process. An argument list with the usual shell=False avoids constructing shell syntax around every value. [1]
That does not make every external program safe. Check the allowed command, arguments, timeout and return code. Starting successfully differs from completing successfully: a normally launched process can still report failure.
Sources
For further detail and to check the information: