python Popen中的花括号

python Popen中的花括号,python,python-2.7,subprocess,popen,Python,Python 2.7,Subprocess,Popen,正在运行的子进程无法正确处理大括号 # 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

正在运行的子进程无法正确处理大括号

# 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 shell

你知道原因吗?我该怎么解决

编辑:

直接从命令行调用命令将返回正确的结果:

ls src/{t,p}*.cpp
src/tonamep.cpp src/pch.cpp

在您的情况下,Popen执行正确,错误从
ls
报告。 执行命令时,它应给出相同的错误:

ls src/{t,p}*.cpp

在终端中。

另一台计算机使用不处理该语法的不同shell。

shell=True
运行不支持该语法的
/bin/sh
。明确指定
bash

from subprocess import check_call

check_call('ls src/{t,p}*.cpp', shell=True, executable='/bin/bash')

我如何在Linux Mint上从2.7.4回滚到2.7.2呢?你的第二个例子对我很有用……两个系统上都有什么shell?@TomFenech它们都是bash shell,当你在“坏”的系统上运行
ls src/{t,p}*.cpp
时,shell中发生了什么?是的,输出是预期的“tonemap.cpp.cpp”。对,但是shell调用的命令不是'ls src/{t,p}*.cpp',而是发出了正确的命令。你为什么说它没有调用你的命令?因为输出不是“tonemap.cpp pch.cpp”当你在命令行/终端中执行ls src/{t,p}*.cpp时会发生什么?它可以工作,输出是“tonemap.cpp pch.cpp”,正如预期的那样在一些系统上运行
bash
,然后呢?@TomFenech:在我的系统上它运行
dash
/bin/sh
通常是“posix”ly。即使它运行
bash
;它可能在posix模式下运行。我不知道posix shell是否应该支持大括号扩展。为了确认,posix shell不支持大括号扩展。