TGINSIGHT SIMILAR POSTS
Најди сличен содржај
Изворен канал @pythonotes · Post #26 · 26 јан.
Правильно ли вы используете аргумент shell у методов subprocess? Вкратце опишу разницу состояний этого аргумента. (полный разбор — тема для статьи в блоге, возможно позже) Флаг "shell" определяет, будет ли использоваться системный шел как основной исполняемый файл для вызова вашей команды. ⏩ shell=True - К вашей команде добавится исполняемый файл /bin/sh или cmd.exe - Ваша команда будет аргументом флага -с, поэтому команду нужно передавать строкой - Команду необходимо передавать с готовым экранированием и лексическим разбором пробелов. ✅ Правильно: subprocess.check_output('ls -sl', shell=True) Команда выглядит так: /bin/sh -c "ls -sl" Здесь видно, что мы передаём значение аргумента -c а не саму команду. ❌Неправильно subprocess.check_output(['ls', '-sl'], shell=True) Команда выглядит так: /bin/sh -c "ls" -sl Ошибки не будет, но аргументы используются неверно. Получите не то что ожидаете. ⏩ shell=False - команду нужно передать списком - ожидается, что первым аргументом будет исполняемый файл - будет запущен непосредственно файл из первого аргумента, без /bin/sh или cmd.exe - автоматическое экранирование пробелов в аргументах списка ✅Правильно subprocess.check_output(['ls', '-sl'], shell=False) Команда будет выглядеть так ls -sl ❌Неправильно subprocess.check_output('ls -sl', shell=False) Эта команда завершится ошибкой: No such file or directory То есть система пытается найти файл "ls -sl" а не файл "ls" А также, если не используется shell то путь к исполняемому файлу требуется писать абсолютным, даже стандартные системные утилиты. ___________________ - для Windows всё аналогично - для других методов из subprocess всё аналогично #tricks#libs
Пронајдени 0 слични објави
Пребарај: #libs
Не се пронајдени слични објави.
Оваа објава нема претходно пресметани резултати на сличност.