2016-02-23 33 views
2

我想在Python 2.7中编写的一些代码中删除大量文件夹,要删除的文件夹与我运行的代码位于相同的文件夹中。要做到这一点我用子以下列方式:如何在python脚本内的子进程中使用*?

import subprocess 


def runsafe(job,args): 
    jobs=[job]; 
    for arg in args: 
     jobs.append(arg) 
    proc=subprocess.Popen(jobs,stdout=subprocess.PIPE) 
    return proc.stdout.readlines() 


if __name__=="__main__": 
    runsafe("rm",["-r","./*/"]) 

如果我这样做的代码不会删除任何文件夹。很明显,如果我在终端中写入rm -r ./*/,我删除了运行代码的文件夹内的所有文件夹。另外,如果我在runsafe("rm",["-r","./foo/"])(其中foo是要删除的文件夹之一)的代码中更改runsafe("rm",["-r","./*/"]),代码将正常工作并删除所需的文件夹。

如何一次删除所有文件夹?如果我使用*表示要删除所有文件夹,为什么它不起作用?

回答

0

你可以用subprocess运行一个shell来解释你的命令。命令行需要作为字符串传递,而不是一个列表:

subprocess.Popen('rm -r *', shell=True, ...) 
+2

但是'shell = True'是不鼓励的,因为它具有安全风险。特别是在配合rm -r命令时,我会犹豫不决。 – dimo414

+0

只要以编程方式创建命令字符串,我就不会看到太多问题。但是,用户(或其他)的输入将会成为一个真正的问题,即使被消毒。 –

+1

即使它是“以编程方式创建”,也更容易出错,因为shell然后必须解析字符串,这意味着空格和其他特殊字符可能会导致问题。 – dimo414

相关问题