Python:子进程调用不识别*通配符?

时间:2016-08-04 05:05:02

标签: python linux shell subprocess

我想删除文件中的所有* .ts。 os.remove没有用。

这并没有扩展*

>>> args = ['rm', '*.ts']
>>> p = subprocess.call(args)
rm: *.ts No such file or directory

1 个答案:

答案 0 :(得分:10)

rm程序采用文件名列表,但*.ts不是文件名列表,而是匹配文件名的模式。您必须为rm命名实际文件。当你使用shell时,shell(但不是rm!)会为你扩展*.ts之类的模式。在Python中,你必须明确地要求它。

import glob
import subprocess
subprocess.check_call(['rm', '--'] + glob.glob('*.ts'))
#                            ^^^^ this makes things much safer, by the way

当然,为什么要打扰subprocess

import glob
import os
for path in glob.glob('*.ts'):
    os.remove(path)