[英]How can I use * in a subprocess inside a python script?
我正在嘗試用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","./foo/"])
runsafe("rm",["-r","./*/"])
runsafe("rm",["-r","./foo/"])
為runsafe("rm",["-r","./foo/"])
(其中foo是要刪除的文件夾之一),該代碼可以正常工作並刪除所需的文件夾。
如何一次刪除所有文件夾? 如果我使用*表示要刪除所有文件夾,為什么它不起作用?
您不能使用*
因為subprocess
不能在外殼程序(例如Bash)中運行,並且它是將*
擴展為文件列表的外殼程序。
您可以使用shell=True
告訴subprocess
在shell中運行,但這不是一個好主意 ,還有更好的選擇。
如果需要遞歸刪除目錄 ,則可以使用shutil.rmtree()
並完全避免啟動子shutil.rmtree()
。
您可以讓subprocess
運行一個外殼程序來解釋您的命令。 命令行需要作為字符串而不是列表傳遞:
subprocess.Popen('rm -r *', shell=True, ...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.