运行子流程不会正确处理大括号
# 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
答案 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来处理该语法。