我试图删除我用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 是要删除的文件夹之一)代码工作正常并删除所需的文件夹。
如何一次删除所有文件夹?为什么我用*表示要删除所有文件夹却不起作用?
最佳答案
您不能使用*
,因为subprocess
不在shell(例如Bash)中运行,并且它是扩展*的shell
到文件列表中。
您可以使用shell=True
告诉subprocess
在shell中运行,但是这个isn't a great idea ,并且还有更好的选择。
如果您需要recursively delete a directory您可以使用shutil.rmtree()
并完全避免启动子进程。
关于python - 如何在 python 脚本内的子进程中使用 * ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580188/