我正在尝试删除我在Python 2.7中编写的一些代码中的大量文件夹,要删除的文件夹与我正在运行的代码位于同一文件夹中。为此,我按以下方式使用子进程:
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","./*/"])
的代码中更改runsafe("rm",["-r","./foo/"])
(其中foo是要删除的文件夹之一),代码工作正常并删除所需的文件夹。
如何一次删除所有文件夹?如果我使用*表示我要删除所有文件夹,为什么它不起作用?
答案 0 :(得分:4)
您不能使用*
因为subprocess
不在shell中运行(例如Bash),而是将*
扩展为文件列表的shell。< / p>
你可以使用shell=True
告诉subprocess
在shell中运行,但是isn't a great idea,还有更好的选择。
如果您需要recursively delete a directory,可以使用shutil.rmtree()
并避免启动子流程。
答案 1 :(得分:0)
您可以让subprocess
运行shell来解释您的命令。命令行需要作为字符串传递,而不是列表:
subprocess.Popen('rm -r *', shell=True, ...)