ฉันจะลบ / ลบโฟลเดอร์ที่ไม่ว่างได้อย่างไร


847

ฉันได้รับข้อผิดพลาด 'การเข้าถึงถูกปฏิเสธ' เมื่อฉันพยายามลบโฟลเดอร์ที่ไม่ว่างเปล่า ฉันใช้คำสั่งต่อไปนี้ในความพยายามของฉัน: os.remove("/folder_name").

วิธีที่มีประสิทธิภาพที่สุดในการลบ / ลบโฟลเดอร์ / ไดเรกทอรีที่ไม่ว่างคืออะไร?


32
นอกจากนี้โปรดทราบว่าแม้ว่าไดเรกทอรีจะว่างเปล่า os.remove จะล้มเหลวอีกครั้งเนื่องจากฟังก์ชันที่ถูกต้องคือ os.rmdir
tzot

และสำหรับrm -rfพฤติกรรมที่เฉพาะเจาะจงโปรดดูที่: stackoverflow.com/questions/814167/ …
Ciro Santilli 冠状病毒审查审查六四事件法轮功

คำตอบ:


1348
import shutil

shutil.rmtree('/folder_name')

อ้างอิงมาตรฐานห้องสมุด shutil.rmtree

ตามการออกแบบrmtreeล้มเหลวบนแผนผังโฟลเดอร์ที่มีไฟล์แบบอ่านอย่างเดียว หากคุณต้องการลบโฟลเดอร์โดยไม่คำนึงว่าไฟล์นั้นมีไฟล์แบบอ่านอย่างเดียวหรือไม่ให้ใช้

shutil.rmtree('/folder_name', ignore_errors=True)

73
โปรดทราบว่าrmtreeจะล้มเหลวหากมีไฟล์แบบอ่านอย่างเดียว: stackoverflow.com/questions/2656322/…
Sridhar Ratnakumar

9
สิ่งนี้ใช้ไม่ได้สำหรับฉัน: Traceback (การโทรล่าสุดครั้งล่าสุด): ไฟล์ "foo.py", บรรทัดที่ 31, ใน <module> shutil.rmtree (thistestdir) ไฟล์ "/usr/lib/python2.6/shutil.py ", บรรทัด 225, ใน rmtree onerror (os.rmdir, พา ธ , sys.exc_info ()) ไฟล์" /usr/lib/python2.6/shutil.py ", บรรทัด 223, ใน rmtree os.rmdir (พา ธ ) OSError: [Errno 90] ไดเรกทอรีไม่ว่าง: '/ path / to / rmtree'
Clayton Hughes

4
Clayton: ในทุกโอกาสไฟล์ถูกเพิ่มพร้อมกันในขณะที่ rmtree กำลังยุ่งอยู่กับการลบเนื้อหา "rm -rf" จะล้มเหลวเหมือนเดิม
ddaa

13
ใครรู้ว่าทำไมฟังก์ชั่นนี้ไม่ได้อยู่ในแพคเกจระบบปฏิบัติการ? ดูเหมือนว่า os.rmdir นั้นไร้ประโยชน์เลยทีเดียว มีข้อโต้แย้งที่ดีว่าเพราะเหตุใดจึงนำมาใช้ในลักษณะนี้
Malcolm

21
@Malcolm แพคเกจเป็น wrapper สำหรับฟังก์ชั่นระบบปฏิบัติการ บนระบบPOSIX rmdirจะล้มเหลวหากไดเรกทอรีไม่ว่างเปล่า UbuntuและWindowsเป็นตัวอย่างยอดนิยมของการปฏิบัติตาม POSIX ในส่วนนี้
เลนซามูเอลแมคลีนผู้อาวุโส

138

จากpython docsเมื่อos.walk():

# Delete everything reachable from the directory named in 'top',
# assuming there are no symbolic links.
# CAUTION:  This is dangerous!  For example, if top == '/', it
# could delete all your disk files.
import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))

1
บางทีฉันผิดพลาดในการรับดาวน์ แต่ฉันสามารถตอนนี้ฉันคิดว่ามันถูกต้อง
ddaa

3
@ddaa: ในขณะที่ใช้งาน shutil นั้นเป็นวิธีที่ง่ายที่สุด แต่ก็ไม่มีอะไรที่ไม่เน้นในเรื่องนี้ ฉันจะไม่ได้ upvoted คำตอบนี้ แต่ฉันมีเวลานี้เท่านั้นที่จะยกเลิกการออก downvote ของคุณ :)
เจเรมี Cantrell

7
รหัสตัวเองคือ pythonic การใช้มันแทน shutil.rmtree ในโปรแกรมจริงจะเป็นแบบไม่มีเสียงประสาน: นั่นจะเป็นการเพิกเฉยต่อ "วิธีหนึ่งที่ชัดเจนในการทำ" อย่างไรก็ตามนี่คือความหมายถอด downmod
ddaa

2
@ddaa มันเป็น unpythonic หรือไม่ที่ต้องการบันทึกทุกไฟล์หรือ dir ที่ถูกลบ ฉันไม่แน่ใจว่าจะทำอย่างไรกับ shutil.rmtree?
โจนาธา

4
@ddaa มันเป็นอาหารสำหรับความคิดเช่นวาทศาสตร์ ฉันรู้ว่าฉันกำลังทำอะไร ฉันแค่คิดว่าคุณอาจต้องการพิจารณา "วิธีที่ชัดเจนในการทำ" โดยให้เหตุผลว่าทำไม shutil.rmtree อาจไม่เหมาะสม "พอดี"
Jonathan Komar

112
import shutil
shutil.rmtree(dest, ignore_errors=True)

1
นี่คือคำตอบที่ถูกต้อง ในระบบของฉันแม้ว่าฉันจะตั้งค่าทุกอย่างในโฟลเดอร์เฉพาะให้เป็นอ่าน - เขียนฉันได้รับข้อผิดพลาดเมื่อฉันพยายามลบ ignore_errors=Trueแก้ปัญหา
Aventinus

3
ในคำตอบของฉันพารามิเตอร์ที่ใช้แทนonerror ignore_errorsวิธีลบไฟล์แบบอ่านอย่างเดียวแทนที่จะเพิกเฉย
Dave Chandler

ใช่สิ่งนี้จะไม่ลบไฟล์เมื่อเกิดข้อผิดพลาด ดังนั้นโดยทั่วไปrmtree()วิธีการทั้งหมดจะถูกละเว้น
Juha Untinen

1
นี่น่าจะเป็นการแก้ไขคำตอบเล็กน้อยเมื่อ 6 ปีก่อน แต่เป็นคำตอบใหม่ ฉันจะทำตอนนี้
Jean-François Corbett

22

จาก python 3.4 คุณสามารถใช้:

import pathlib

def delete_folder(pth) :
    for sub in pth.iterdir() :
        if sub.is_dir() :
            delete_folder(sub)
        else :
            sub.unlink()
    pth.rmdir() # if you just want to delete dir content, remove this line

ที่pthเป็นpathlib.Pathตัวอย่าง ดี แต่อาจไม่ใช่วิธีที่เร็วที่สุด


10

จากdocs.python.org :

ตัวอย่างนี้แสดงวิธีลบทรีไดเรกทอรีใน Windows ที่ไฟล์บางไฟล์มีชุดบิตแบบอ่านอย่างเดียว มันใช้โทรกลับ onerror เพื่อล้างบิตอ่านได้อย่างเดียวและพยายามลบ ความล้มเหลวใด ๆ ที่ตามมาจะเผยแพร่

import os, stat
import shutil

def remove_readonly(func, path, _):
    "Clear the readonly bit and reattempt the removal"
    os.chmod(path, stat.S_IWRITE)
    func(path)

shutil.rmtree(directory, onerror=remove_readonly)

7
import os
import stat
import shutil

def errorRemoveReadonly(func, path, exc):
    excvalue = exc[1]
    if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES:
        # change the file to be readable,writable,executable: 0777
        os.chmod(path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)  
        # retry
        func(path)
    else:
        # raiseenter code here

shutil.rmtree(path, ignore_errors=False, onerror=errorRemoveReadonly) 

หากไม่ได้ตั้งค่า ign_errors ข้อผิดพลาดจะถูกละเว้น มิฉะนั้นหากมีการตั้งค่า onerror มันจะถูกเรียกให้จัดการข้อผิดพลาดด้วยข้อโต้แย้ง (func, path, exc_info) โดยที่ func คือ os.listdir, os.remove หรือ os.rmdir path คืออาร์กิวเมนต์ของฟังก์ชันที่ทำให้ล้มเหลว และ exc_info เป็น tuple ที่ส่งคืนโดย sys.exc_info () ถ้าละเว้น_errorsเป็นเท็จและ onerror เป็นไม่มีข้อยกเว้นจะถูกยกรหัสศูนย์ที่นี่


ตามเอกสารแล้วข้อยกเว้นที่ยกโดย onerror จะไม่ถูกจับดังนั้นฉันไม่แน่ใจว่าการป้อนรหัสการเพิ่มที่นี่หมายถึงอะไร
kmarsh

-1 ดูเหมือนจะซับซ้อนเกินไปเมื่อเทียบกับคำตอบของเดฟแชนด์เลอร์ นอกจากนี้หากเราต้องการลบแบบอ่านอย่างเดียวเราไม่จำเป็นต้องทำให้ไฟล์ปฏิบัติการได้
idbrii

7

ตามคำตอบของ kkubasik ให้ตรวจสอบว่ามีโฟลเดอร์อยู่ก่อนที่จะลบหรือไม่และมีประสิทธิภาพมากกว่า

import shutil
def remove_folder(path):
    # check if folder exists
    if os.path.exists(path):
         # remove if exists
         shutil.rmtree(path)
    else:
         # throw your exception to handle this special scenario
         raise XXError("your exception") 
remove_folder("/folder_name")

6
สิ่งนี้นำเสนอสภาพการแข่งขันที่เป็นไปได้
Corey Goldberg

1
อ้างอิงจากpythonic-way-to-delete-a-file ซึ่งอาจไม่มีอยู่จริงส่วนใหญ่จะดีกว่าที่จะtryลบและจัดการexceptกว่าสายexists()แรก
TT

6

หากคุณแน่ใจว่าคุณต้องการลบต้นไม้ dir ทั้งหมดและไม่สนใจเนื้อหาของ dir อีกแล้วการรวบรวมข้อมูลสำหรับต้นไม้ dir ทั้งหมดนั้นเป็นความโง่เขลา ... เพียงเรียกคำสั่งระบบปฏิบัติการดั้งเดิมจาก python เพื่อทำเช่นนั้น มันจะเร็วขึ้นมีประสิทธิภาพและใช้หน่วยความจำน้อยลง

RMDIR c:\blah /s /q 

หรือ * ระวัง

rm -rf /home/whatever 

ในไพ ธ อนรหัสจะดูเหมือน ..

import sys
import os

mswindows = (sys.platform == "win32")

def getstatusoutput(cmd):
    """Return (status, output) of executing cmd in a shell."""
    if not mswindows:
        return commands.getstatusoutput(cmd)
    pipe = os.popen(cmd + ' 2>&1', 'r')
    text = pipe.read()
    sts = pipe.close()
    if sts is None: sts = 0
    if text[-1:] == '\n': text = text[:-1]
    return sts, text


def deleteDir(path):
    """deletes the path entirely"""
    if mswindows: 
        cmd = "RMDIR "+ path +" /s /q"
    else:
        cmd = "rm -rf "+path
    result = getstatusoutput(cmd)
    if(result[0]!=0):
        raise RuntimeError(result[1])

33
-1 จุดประสงค์ในการใช้ทั้งหมดshutil.rmdirคือการป้องกันคุณจากประเภทของระบบปฏิบัติการ
mtrw

3
ฉันเข้าใจแนวคิด แต่เมื่อมีคนตระหนักดีถึงความจริงที่ว่าเขาต้องการลบโฟลเดอร์ทั้งหมดแล้วจุดของการรวบรวมข้อมูลทรีไฟล์คืออะไร shutil.rmdir โทรมาโดยเฉพาะ os.listdir (), os.path.islink () ฯลฯ ฯลฯ การตรวจสอบบางอย่างที่ไม่จำเป็นเสมอจริง ๆ ทุกอย่างที่จำเป็นคือการยกเลิกการเชื่อมโยงโหนดระบบไฟล์ ข้างบนระบบ build บางระบบเช่น MSWindows สำหรับการพัฒนา MSAuto / WinCE จากนั้น shtuil.rmdir จะล้มเหลวเกือบทุกครั้งเนื่องจากการพัฒนาแบบกลุ่มที่ใช้ MSAuto ล็อคไฟล์ที่สร้างขึ้นแปลก ๆ เมื่อออกไม่สำเร็จและมีเพียง rmdir / S / Q หรือเริ่มใหม่เท่านั้น พวกเขา
PM

2
อืมแค่ rm ใกล้กับเคอร์เนลใช้เวลาน้อยกว่าหน่วยความจำและซีพียู ..... และอย่างที่ฉันบอกเหตุผลสำหรับฉันที่จะใช้วิธีนี้เป็นเพราะล็อคทิ้งไว้โดยสคริปต์สร้างชุด MSAuto ...
PM

3
ใช่ แต่การใช้ shutil จะทำให้รหัสข้ามแพลตฟอร์มและรายละเอียดของแพลตฟอร์มเป็นนามธรรม
xshoppyx

2
ฉันไม่คิดว่าคำตอบนี้ควรจะลงคะแนนต่ำกว่า 1 เนื่องจากให้การอ้างอิงที่ดีมากสำหรับการทำงานในบางสถานการณ์ที่ผู้อ่านอาจสนใจฉันสนุกกับการมีวิธีการโพสต์หลายรายการตามลำดับ ดังนั้นแม้ว่าฉันไม่จำเป็นต้องใช้สิ่งนี้ แต่ตอนนี้ฉันรู้แล้วว่าสามารถทำได้และวิธีการ
kmcguire

5

เพียงตัวเลือก python 3.5 เพื่อทำคำตอบให้สมบูรณ์ (ฉันอยากจะพบพวกเขาที่นี่)

import os
import shutil
from send2trash import send2trash # (shutil delete permanently)

ลบโฟลเดอร์หากไม่มีข้อมูล

root = r"C:\Users\Me\Desktop\test"   
for dir, subdirs, files in os.walk(root):   
    if subdirs == [] and files == []:
           send2trash(dir)
           print(dir, ": folder removed")

ลบโฟลเดอร์ด้วยถ้ามันมีไฟล์นี้

    elif subdirs == [] and len(files) == 1: # if contains no sub folder and only 1 file 
        if files[0]== "desktop.ini" or:  
            send2trash(dir)
            print(dir, ": folder removed")
        else:
            print(dir)

ลบโฟลเดอร์หากมีไฟล์. srt หรือ. txt เท่านั้น

    elif subdirs == []: #if dir doesn’t contains subdirectory
        ext = (".srt", ".txt")
        contains_other_ext=0
        for file in files:
            if not file.endswith(ext):  
                contains_other_ext=True
        if contains_other_ext== 0:
                send2trash(dir)
                print(dir, ": dir deleted")

ลบโฟลเดอร์หากมีขนาดน้อยกว่า 400kb:

def get_tree_size(path):
    """Return total size of files in given path and subdirs."""
    total = 0
    for entry in os.scandir(path):
        if entry.is_dir(follow_symlinks=False):
            total += get_tree_size(entry.path)
        else:
            total += entry.stat(follow_symlinks=False).st_size
    return total


for dir, subdirs, files in os.walk(root):   
    If get_tree_size(dir) < 400000:  # ≈ 400kb
        send2trash(dir)
    print(dir, "dir deleted")

4
โปรดแก้ไขการเยื้องและรหัสif files[0]== "desktop.ini" or:
Mr_and_Mrs_D

5

ฉันต้องการเพิ่มวิธี "บริสุทธิ์ pathlib":

from pathlib import Path
from typing import Union

def del_dir(target: Union[Path, str], only_if_empty: bool = False):
    target = Path(target).expanduser()
    assert target.is_dir()
    for p in sorted(target.glob('**/*'), reverse=True):
        if not p.exists():
            continue
        p.chmod(0o666)
        if p.is_dir():
            p.rmdir()
        else:
            if only_if_empty:
                raise RuntimeError(f'{p.parent} is not empty!')
            p.unlink()
    target.rmdir()

นี้อยู่บนพื้นฐานความจริงที่ว่าคือสามารถสั่งซื้อและเส้นทางอีกต่อไปมักจะเรียงลำดับหลังจากที่เส้นทางที่สั้นกว่าเช่นเดียวกับPath strดังนั้นไดเรกทอรีจะมาก่อนไฟล์ หากเราย้อนกลับการเรียงลำดับไฟล์จะมาก่อนที่คอนเทนเนอร์ของพวกเขาดังนั้นเราสามารถยกเลิกการเชื่อมโยง / rmdir พวกเขาทีละคนด้วยหนึ่งผ่าน

ประโยชน์ที่ได้รับ:

  • มันไม่ได้พึ่งพาไบนารีภายนอก: ทุกอย่างใช้โมดูลที่รวมแบตเตอรี่ของ Python (Python> = 3.6)
  • มันรวดเร็วและมีประสิทธิภาพหน่วยความจำ: ไม่กองการเรียกซ้ำไม่จำเป็นต้องเริ่มต้นกระบวนการย่อย
  • มันเป็นแพลตฟอร์มข้าม (อย่างน้อยนั่นคือสิ่งที่ pathlibสัญญาไว้ใน Python 3.6 ไม่มีการดำเนินการข้างต้นที่ระบุว่าไม่ทำงานบน Windows)
  • หากจำเป็นหนึ่งสามารถทำการบันทึกที่ละเอียดมากเช่นบันทึกการลบแต่ละครั้งที่เกิดขึ้น

คุณสามารถให้ตัวอย่างการใช้งานเช่น del_dir (เส้นทาง ())? ขอบคุณ
lcapra

@lcapra เพียงแค่เรียกมันพร้อมกับไดเรกทอรีที่จะลบเป็น ARG แรก
pepoluan

3
def deleteDir(dirPath):
    deleteFiles = []
    deleteDirs = []
    for root, dirs, files in os.walk(dirPath):
        for f in files:
            deleteFiles.append(os.path.join(root, f))
        for d in dirs:
            deleteDirs.append(os.path.join(root, d))
    for f in deleteFiles:
        os.remove(f)
    for d in deleteDirs:
        os.rmdir(d)
    os.rmdir(dirPath)

ยอดเยี่ยมในการสร้างสคริปต์ที่ทำให้ไฟล์อยู่ในระยะ quarenteen ก่อนที่จะลบแบบสุ่มสี่สุ่มห้า
racribeiro

3

หากคุณไม่ต้องการใช้shutilโมดูลคุณสามารถใช้osโมดูลได้

from os import listdir, rmdir, remove
for i in listdir(directoryToRemove):
    os.remove(os.path.join(directoryToRemove, i))
rmdir(directoryToRemove) # Now the directory is empty of files

2
os.removeไม่สามารถลบไดเรกทอรีดังนั้นสิ่งนี้จะเพิ่มOsErrorหากdirectoryToRemoveมีไดเรกทอรีย่อย
Eponymous

#pronetoraceconditions
kapad

3

สิบปีต่อมาและการใช้ Python 3.7 และ Linux ยังคงมีวิธีที่แตกต่างในการทำเช่นนี้:

import subprocess
from pathlib import Path

#using pathlib.Path
path = Path('/path/to/your/dir')
subprocess.run(["rm", "-rf", str(path)])

#using strings
path = "/path/to/your/dir"
subprocess.run(["rm", "-rf", path])

โดยพื้นฐานแล้วมันใช้โมดูโพรเซสย่อยของไพ ธ อนเพื่อรัน bash script $ rm -rf '/path/to/your/dirราวกับว่าคุณใช้เทอร์มินัลเพื่อทำงานเดียวกัน มันไม่ได้เป็น Python อย่างสมบูรณ์ แต่มันก็เสร็จเรียบร้อยแล้ว

เหตุผลที่ฉันรวมpathlib.Pathตัวอย่างนี้เป็นเพราะจากประสบการณ์ของฉันมันมีประโยชน์มากเมื่อจัดการกับเส้นทางที่เปลี่ยนแปลง ขั้นตอนพิเศษของการนำเข้าpathlib.Pathโมดูลและการแปลงผลลัพธ์สุดท้ายให้เป็นสตริงมักจะมีค่าใช้จ่ายที่ต่ำกว่าสำหรับการพัฒนา มันจะสะดวกถ้าPath.rmdir()มาพร้อมกับตัวเลือกหาเรื่องเพื่อจัดการกับ dirs ที่ไม่ว่างเปล่าอย่างชัดเจน


ฉันยังเปลี่ยนไปวิธีนี้เพราะฉันวิ่งเข้าไปในปัญหาเกี่ยวกับและโฟลเดอร์ที่ซ่อนอยู่เช่นrmtree .vscodeตรวจพบโฟลเดอร์นี้เป็นไฟล์ข้อความและข้อผิดพลาดบอกฉันว่าไฟล์นี้เคยเป็นbusyและไม่สามารถลบได้
Daniel Eisenreich

2

ในการลบโฟลเดอร์แม้ว่ามันอาจจะไม่มีอยู่ (หลีกเลี่ยงสภาพการแข่งขันในคำตอบของ Charles Chow ) แต่ก็ยังมีข้อผิดพลาดเมื่อสิ่งอื่น ๆ เกิดข้อผิดพลาด (เช่นปัญหาการอนุญาตข้อผิดพลาดในการอ่านดิสก์ไฟล์ไม่ใช่ไดเรกทอรี)

สำหรับ Python 3.x:

import shutil

def ignore_absent_file(func, path, exc_inf):
    except_instance = exc_inf[1]
    if isinstance(except_instance, FileNotFoundError):
        return
    raise except_instance

shutil.rmtree(dir_to_delete, onerror=ignore_absent_file)

รหัส Python 2.7 เกือบเหมือนกัน:

import shutil
import errno

def ignore_absent_file(func, path, exc_inf):
    except_instance = exc_inf[1]
    if isinstance(except_instance, OSError) and \
        except_instance.errno == errno.ENOENT:
        return
    raise except_instance

shutil.rmtree(dir_to_delete, onerror=ignore_absent_file)

1

ด้วย os.walk ฉันจะเสนอวิธีแก้ปัญหาซึ่งประกอบด้วยการเรียก Python แบบ 3 บรรทัด:

python -c "import sys; import os; [os.chmod(os.path.join(rs,d), 0o777) for rs,ds,fs in os.walk(_path_) for d in ds]"
python -c "import sys; import os; [os.chmod(os.path.join(rs,f), 0o777) for rs,ds,fs in os.walk(_path_) for f in fs]"
python -c "import os; import shutil; shutil.rmtree(_path_, ignore_errors=False)"

chmod สคริปต์แรกของไดเรกทอรีย่อยทั้งหมดสคริปต์ที่สอง chmod ไฟล์ทั้งหมด จากนั้นสคริปต์ที่สามจะลบทุกอย่างโดยไม่มีอุปสรรค

ฉันได้ทดสอบสิ่งนี้จาก "Shell Script" ในงาน Jenkins (ฉันไม่ต้องการเก็บสคริปต์ Python ใหม่ลงใน SCM นั่นคือเหตุผลที่ค้นหาโซลูชันแบบบรรทัดเดียว) และทำงานได้กับ Linux และ Windows


ด้วยpathlibคุณสามารถรวมสองขั้นตอนแรกเป็นหนึ่งเดียว:[p.chmod(0o666) for p in pathlib.Path(_path_).glob("**/*")]
pepoluan

0

คุณสามารถใช้คำสั่ง os.system เพื่อความเรียบง่าย:

import os
os.system("rm -rf dirname")

เห็นได้ชัดว่าจริง ๆ แล้วมันเรียกขั้วของระบบเพื่อให้บรรลุภารกิจนี้


19
ขออภัยนี่คือ Unpythonic และขึ้นอยู่กับแพลตฟอร์ม
Ami Tavory

0

ฉันได้พบวิธีที่ง่ายมากที่จะลบใด ๆโฟลเดอร์ (แม้ไม่ว่างเปล่า)หรือไฟล์บนระบบปฏิบัติการ Windows

os.system('powershell.exe  rmdir -r D:\workspace\Branches\*%s* -Force' %CANDIDATE_BRANCH)

0

สำหรับ Windows หากไดเรกทอรีไม่ว่างเปล่าและคุณมีไฟล์แบบอ่านอย่างเดียวหรือคุณได้รับข้อผิดพลาดเช่น

  • Access is denied
  • The process cannot access the file because it is being used by another process

ลองนี้ os.system('rmdir /S /Q "{}"'.format(directory))

มันเทียบเท่ากับrm -rfใน Linux / Mac

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.