在子进程中调用列表项

时间:2016-04-21 16:09:21

标签: python subprocess

我试图使用subprocess.call调用列表时间。它似乎无法正常工作。任何更好的方法来做到这一点。

import os, sys
import subprocess as sb


files_to_remove=['*.jpg','*.txt','*.gif']

for item in files_to_remove:
    try:
        **sb.call(['rm' %s]) %item** # not working 

    except:
        print 'no %s files in directory' %item

2 个答案:

答案 0 :(得分:0)

它没有按预期工作,因为它逃脱了参数。以下工作:

#!/usr/bin/python

import os, sys
import subprocess as sb

files_to_remove=['*.jpg','*.txt','*.gif']

for item in files_to_remove:
    try:
        sb.check_call(['rm ' + item], shell=True)
    except sb.CalledProcessError as e:
        print(e.output)
    except:
        print("unknown error")

答案 1 :(得分:0)

此处无需使用子流程

import glob
import os

files_to_remove = ['*.jpg', '*.txt', '*.gif']
for files_glob in files_to_remove:
    for filename in glob.glob(files_glob):
        os.remove(filename)

如果我们坚持使用子流程(我们不会删除这些文件),我们会这样做

import glob
import subprocess

files_to_remove=['*.jpg', '*.txt', '*.gif']

for files_glob in files_to_remove:
    matches = glob.glob(files_glob)
    if matches:
        subprocess.check_call(['rm'] + matches)
    else:
        print 'no %s files in directory' % files_glob

最好永远不要使用shell=True