все Python 3shlexфункция
shlex.split()
разбор командной строки
Разбивает строку как командная оболочка Unix: учитывает кавычки и экранирование. 'a "b c"' → ['a', 'b c'].
Синтаксис
shlex.split(s, comments=False, posix=True)
В отличие от str.split(), не рвёт аргумент в кавычках, поэтому годится, чтобы превратить строку команды в список для subprocess.run без shell=True. Правила — POSIX-оболочки, не Windows: обратная косая черта экранирует, так что путь C:\Users превратится в C:Users. Комментарии # по умолчанию не вырезаются (comments=True это включает), а незакрытая кавычка даёт ValueError.
Примеры
import shlex
print(shlex.split('cp "my file.txt" backup/')) # → ['cp', 'my file.txt', 'backup/']
print('cp "my file.txt" backup/'.split()) # → ['cp', '"my', 'file.txt"', 'backup/']
import shlex
print(shlex.split(r'dir C:\Users')) # → ['dir', 'C:Users'] — обратная косая черта съедена
print(shlex.split('run # note', comments=True)) # → ['run']
shlex.split('echo "oops') # → ValueError: No closing quotation
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности