2016-08-04 3 views
1

Я хочу удалить все * .ts в файле. os.remove не работает.Python: вызов подпроцесса не распознает символ подстановки?

И это не расширяет *

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

Возможный дубликат [Вызов ет из подпроцесса, используя подстановочные знаки не удаляют файлы] (http://stackoverflow.com/questions/11025784/calling-rm-from-subprocess-using-wildcards-does-not -remove-The-файлы) – tripleee

ответ

9

Программа rm принимает список имен файлов, но *.ts не список имен файлов, это шаблон для сопоставления имен файлов. Вы должны назвать фактические файлы для rm. Когда вы используете оболочку, оболочка (но не 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) 
Смежные вопросы