os.system() запускает команду через shell, автоматически разбивая строку на аргументы, а в subprocess запуск происходит непосредственно вызываемого процесса, аргументы которому подготавливает программист в виде массива.
os.system() и небезопасен, и его возможности ограничены. Единственное преимущество — простота использования.