簡體   English   中英

如何在Python腳本的子過程中使用*?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM