【问题标题】:How to do force remove in Python like rm -rf on Linux? [duplicate]如何在 Python 中像 Linux 上的 rm -rf 一样强制删除? [复制]
【发布时间】:2012-11-25 20:00:24
【问题描述】:

我想在不关闭服务器的情况下删除我的应用服务器的一些日志文件。我可以在 Python 中使用什么命令来执行此操作,例如 Linux 系统中的 rm -rf

请帮忙。

【问题讨论】:

  • '强制'删除?您对不起作用的代码有任何问题吗?
  • 嗨,我想使用 WLST 删除日志文件

标签: python


【解决方案1】:

shutil 在这种情况下是你的朋友。

http://docs.python.org/2/library/shutil.html#shutil.rmtree

import shutil
shutil.rmtree("/my/path/to/folder/to/destroy")

【讨论】:

  • 当谷歌参考中的最高结果就是这个问题时,还有其他人看到这个自鸣得意的回应中的讽刺吗?
  • 虽然有用,但rmtree 并不等同:如果您尝试删除单个文件,它会出错。在这里查看我的答案:stackoverflow.com/a/9559881/260491
【解决方案2】:
#!/usr/bin/env python             
import os

def nukedir(dir):
    if dir[-1] == os.sep: dir = dir[:-1]
    files = os.listdir(dir)
    for file in files:
        if file == '.' or file == '..': continue
        path = dir + os.sep + file
        if os.path.isdir(path):
            nukedir(path)
        else:
            os.unlink(path)
    os.rmdir(dir)

nukedir("/home/mb/test");

以上函数将递归删除任何目录...

【讨论】:

  • 您好,感谢您的回复,但问题是我想通过将 WLST 与 Pythan 一起使用来删除 Weblogic 日志文件。
  • 这似乎应该适用于目录,但它不等同于rm -rf:如果您尝试删除单个文件,它会出错。此外,最好尽可能使用 Python 标准库中经过良好测试的代码,而不是自己编写代码。在此处查看我的四行rm -rf 函数:stackoverflow.com/a/9559881/260491
  • 你不需要自己写。 Python 的标准库已经有 shutil.rmtree() 递归删除
【解决方案3】:

您的服务器是否运行 Linux,或者这只是一个示例?

在 python 上,shutil.rmtree() 等同于rm -r(正如@Alex 已经回答的那样)。所有 python 删除命令 (os.unlink(), os.rmdir()) 无需检查即可工作,因此它们始终等同于 rm -f

但如果您使用的是 Windows,操作系统 will not let you 会删除一个仍然打开的文件;你会得到一个例外。 AFAIK,没有特权的进程对此无能为力。

【讨论】:

  • 嗨,alexis,我的服务器在linux机器上运行。问题是我没有权限以 Weblogic 用户身份登录。所以我曾经以无权删除Weblogic日志文件的用户身份登录。我正在将 WLST 与 Pythan 一起使用。有没有办法使用 WLST 删除文件。
  • 不知道 WLST 或 Weblogic 是什么。要删除文件,您必须能够在有权删除它的进程下运行一些程序。如果 python 的 os.unlink() 做不到,那么在 any 编程语言中你无能为力:操作系统不会让你这样做。
  • 虽然有用,但rmtree 并不等同:如果您尝试删除单个文件,它会出错。在这里查看我的答案:stackoverflow.com/a/9559881/260491
【解决方案4】:

您可以使用subprocess 模块:

from subprocess import Popen, PIPE, STDOUT

cmd = 'rm -frv /path/to/dir'
p   = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
out = p.stdout.read()
print out

【讨论】:

  • 我正在查看一些代码,开发人员使用了 subprocess rm vs unlink。他们最初使用的是 unlink,然后切换到subprocess.call(['rm', '-f', file_path])。我只是想了解他们为什么要这样做,以及性能是否有所提高?
  • 因为没有一个内置的删除文件或文件夹的方法是可靠的,即使您有所有可能找到的解决方法。
猜你喜欢
  • 2015-08-17
  • 2023-03-06
  • 2013-07-07
  • 1970-01-01
  • 2023-03-10
  • 2011-02-28
  • 2016-07-09
  • 2017-01-16
  • 1970-01-01
相关资源
最近更新 更多