我想在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","./*/"])
,代码将正常工作并删除所需的文件夹。
如何一次删除所有文件夹?如果我使用*表示要删除所有文件夹,为什么它不起作用?
但是'shell = True'是不鼓励的,因为它具有安全风险。特别是在配合rm -r命令时,我会犹豫不决。 – dimo414
只要以编程方式创建命令字符串,我就不会看到太多问题。但是,用户(或其他)的输入将会成为一个真正的问题,即使被消毒。 –
即使它是“以编程方式创建”,也更容易出错,因为shell然后必须解析字符串,这意味着空格和其他特殊字符可能会导致问题。 – dimo414