Как объяснено в subprocess.Popen
документации (subprocess.call
делегирует Popen
, как и все другие вспомогательные функции), subprocess.call('command', shell=True)
в Unix эквивалентно выполнению argv :
['/bin/sh', '-c', 'command']
И sh
не поддерживает расширение скобок (это официальное имя для синтаксиса {a,b}
).
Чтобы вместо этого запустить команду с bash
, вам нужнопереопределить исполняемый файл оболочки, используемый с параметром executable
:
p = subprocess.call('command', shell=True, executable='/bin/bash')
Пример:
$ python -c 'import subprocess; subprocess.call("echo /usr/{lib,bin}", shell=True, executable="/bin/bash")'
/usr/lib /usr/bin
Обратите внимание, однако, что использование shell=True
не рекомендуется, потому что это по сути платформа-конкретный, зависит от локальной оболочки и ее настроек и может быть ошибкой или уязвимостью безопасности, если вы используете ненадежный ввод.Лучше составьте командную строку вручную и передайте полученный argv.