При использовании shell=True
вы должны предоставить команду в виде строки вместо списка:
cmd_output,cmd_err = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True).communicate()
При передаче списка вместо этого не будет выполнять то, что вы ожидаете :
В POSIX с shell = True оболочкой по умолчанию является / bin / sh.Если args является строкой, строка определяет команду для выполнения через оболочку.Это означает, что строка должна быть отформатирована точно так же, как при вводе в командной строке.Это включает, например, кавычки или обратную косую черту, экранирующие имена файлов с пробелами в них.Если args - последовательность, первый элемент задает командную строку, и любые дополнительные элементы будут обрабатываться как дополнительные аргументы самой оболочки.
Тем не менее, возможно, проще, безопаснее, более переносимо и надежнее просто выполнять эту обработку в Python.У него отличные возможности регулярных выражений , и все вышеперечисленное означает всего несколько строк кода Python.