Любой способ выполнить конвейерную команду в Python с использованием модуля подпроцесса без использования shell = True?

Я хочу запустить команду linux / bash из командной строки из Python, которая сначала выполняет tars файлы, а затем разбивает файл tar. В bash команда будет выглядеть примерно так:

> tar -cvf - path_to_archive/* | split -b 20m -d -a 5 - "archive.tar.split"

Я знаю, что могу выполнить ее, используя подпроцесс, установив shell = True и отправив всю команду в виде строки, например:

import subprocess    

subprocess.call("tar -cvf - path_to_archive/* | split -b 20m -d -a 5 - 'archive.tar.split'", shell=True)

... но для безопасности причины, по которым я хотел бы найти способ пропустить часть "shell = True", (который принимает список строк, а не полную строку командной строки, и который не может правильно обрабатывать символ канала). Есть ли какое-нибудь решение для этого в Python? То есть, можно как-то настроить связанные каналы или какое-то другое решение?

12
задан Samuel Lampa 6 December 2010 в 16:47
поделиться