Фигурные скобки в питоне попен

Запущенный подпроцесс не будет правильно обрабатывать фигурные скобки

# 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

в терминале.

Другая машина использует другую оболочку, которая не обрабатывает этот синтаксис.

Другие вопросы по тегам