Содржина на објавата
В посте про правильное использование аргумента shell упоминалось что в некоторых случаях атрибуты следует отправлять списком а не строкой. Что делать, если команда приходит именно строкой? Как её преобразовать в список? Ответ очевиден >>> cmd_str = 'ls -sl' >>> cmd_lst = cmd_str.split(' ') >>> print(cmd_lst) ['ls', '-sl'] Но что, если команда имеет более сложный вид в плане пробелов? >>> cmd_str = 'mkdir "My Folder Name"' >>> print(cmd_str.split(' ')) ['mkdir', '"My', 'Folder', 'Name"'] Определённо что-то пошло не так! Имя директории содержит пробелы, поэтому весь путь взят в кавычки. Нам определённо не надо её разделять на аргументы. Чтобы сделать всё правильно нам потребуется распарсить строку чтобы обнаружить, что там в кавычках а что нет. Но в стандартной поставке Python давно уже есть готовое решение, моудль shlex (shell lexical analyzers) который всё это умеет. >>> import shlex >>> shlex.split('mkdir "My Folder Name"') ['mkdir', 'My Folder Name'] Теперь команда сработает верно. И не переживайте что кавычки пропали, subprocess сам всё разрулит с пробелами 😎. На Windows всё аналогично. #libs