Reputation: 7564
Running subprocess won't handle curly braces correctly
# 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
The same program will work on a different machine with python 2.7.2. Both systems use bash shells.
Do you the reason and how can I fix it?
EDIT:
Invoking the command directly from the command line returns the correct result:
ls src/{t,p}*.cpp
src/tonamep.cpp src/pch.cpp
Upvotes: 5
Views: 2017
Reputation: 414197
shell=True
runs /bin/sh
that doesn't support this syntax. Specify bash
explicitly:
from subprocess import check_call
check_call('ls src/{t,p}*.cpp', shell=True, executable='/bin/bash')
Upvotes: 10
Reputation: 114481
The other machine uses a different shell that doesn't handle that syntax.
Upvotes: 0
Reputation: 4318
In your case, Popen executed correctly, error is reported from ls
.
It should give same error when you execute the command:
ls src/{t,p}*.cpp
in terminal.
Upvotes: 1