在python Popen的卷曲括号

时间:2014-03-26 11:27:37

标签: 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.2的不同机器上运行。两个系统都使用bash shell。

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

编辑:

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

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

3 个答案:

答案 0 :(得分:7)

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

from subprocess import check_call

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

答案 1 :(得分:1)

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

ls src/{t,p}*.cpp

在终端。

答案 2 :(得分:0)

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