在python Popen的卷曲括号

mem*_*ecs 5 python subprocess popen 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
Run Code Online (Sandbox Code Playgroud)

相同的程序将在python 2.7.2的不同机器上运行.两个系统都使用bash shell.

你是理由,我该如何解决?

编辑:

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

ls src/{t,p}*.cpp
src/tonamep.cpp src/pch.cpp
Run Code Online (Sandbox Code Playgroud)

jfs*_*jfs 9

shell=True运行/bin/sh不支持此语法.bash明确指定:

from subprocess import check_call

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

  • @TomFenech:在我的系统上,它运行“破折号”。`/ bin / sh`通常是“ posix”。即使它运行`bash`;它可能以posix模式运行。我不知道posix shell是否应该支持花括号扩展。 (2认同)