The problem is that you are passing two arguments to subprocess.Popen
: rm
and a path, such as /home/user/t*
(if prefix is t
). Popen
then will try to remove a file named exactly this way: t followed by an asterisk at the end.
If you want to use Popen
with the wildcard, you should pass the shell
parameter as True
. In this case, however, the command should be a string, not a list of arguments:
Popen("%s %s" % (cmd, args), shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
(Otherwise, the list of arguments will be given to the new shell, not to the command)
Another solution, safer and more efficient, is to use the glob
module:
import glob
files = glob.glob(prepend+"*")
args = [cmd] + files
Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
All in all, however, I agree that levon solution is the saner one. In this case, glob
is the answer too:
files = glob.glob(prepend+"*")
for file in files:
os.remove(file)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…