Фигурные скобки в питоне попен
Запущенный подпроцесс не будет правильно обрабатывать фигурные скобки
# Python 2.7.4
import subprocess
subprocess.Popen('ls src/*.cpp',shell=True):
src/tonemap.cpp src/pch.cpp
subprocess.Popen('ls src/{t,p}*.cpp', shell=True)
ls: cannot access src/{p,t}*.cpp: No such file or directory
Эта же программа будет работать на другом компьютере с Python 2.7.2. Обе системы используют оболочки bash.
Есть ли у вас причина и как я могу это исправить?
РЕДАКТИРОВАТЬ:
Вызов команды непосредственно из командной строки возвращает правильный результат:
ls src/{t,p}*.cpp
src/tonamep.cpp src/pch.cpp
3 ответа
Решение
shell=True
работает /bin/sh
это не поддерживает этот синтаксис. Уточнить bash
в явном виде:
from subprocess import check_call
check_call('ls src/{t,p}*.cpp', shell=True, executable='/bin/bash')
В вашем случае Popen выполнен правильно, об ошибке сообщается ls
, Это должно выдать ту же ошибку при выполнении команды:
ls src/{t,p}*.cpp
в терминале.
Другая машина использует другую оболочку, которая не обрабатывает этот синтаксис.