在Linux上如何在Python中像rm-rf一样强制删除?
我想在不关闭服务器的情况下删除我的应用服务器的一些日志文件。在Linux系统中,使用Python(如在Linux上如何在Python中像rm-rf一样强制删除?,python,Python,我想在不关闭服务器的情况下删除我的应用服务器的一些日志文件。在Linux系统中,使用Python(如rm-rf)可以使用什么命令来执行此操作 请帮忙 #!/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 ==
rm-rf
)可以使用什么命令来执行此操作
请帮忙
#!/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");
上述函数将递归删除任何目录…在本例中,shutil是您的朋友
您可以使用
子流程
模块:
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
您的服务器是否运行Linux,或者这只是一个示例 在python上,
shutil.rmtree()
相当于rm-r
(正如@Alex已经回答的那样)。所有python删除命令(os.unlink(),os.rmdir()
)都可以在不进行检查的情况下工作,因此它们总是等价于rm-f
但是如果你在Windows上,操作系统会删除一个仍然打开的文件;你会得到一个例外。好了,一个非特权程序对此无能为力。你看过“强制”删除吗?你对不起作用的代码有什么问题吗?嗨,我想用WLSTHI alexis删除日志文件,我的服务器在linux机器上运行。问题是我没有权限以Weblogic用户身份登录。所以我以前是以没有权限删除Weblogic日志文件的用户身份登录的。我将WLST与Pytan一起使用。有没有办法用WLST删除文件。不知道什么是WLST或Weblogic。要删除文件,您必须能够在具有删除权限的进程下运行某些程序。如果python的
os.unlink()
做不到这一点,那么在任何编程语言中你都无能为力:操作系统都不会让你这么做。虽然有用,rmtree
并不等效:如果你试图删除一个文件,它就会出错。在这里查看我的答案:您好,谢谢您的回复,但问题是我想使用WLST和Pythan删除Weblogic日志文件。这似乎适用于目录,但并不等同于rm-rf
:如果尝试删除单个文件,则会出错。此外,如果可能,最好使用Python标准库中经过良好测试的代码,而不是编写自己的代码。在这里查看我的四行rm-rf
函数:您不需要编写自己的函数。Python的标准库已经有了递归删除的shutil.rmtree(),当Google参考中的顶级结果是这个问题时,其他人是否看到了这个自鸣得意的回答中的讽刺?虽然有用,但是,rmtree
并不等效:如果你试图删除单个文件,它就会出错。在这里看到我的答案:我正在查看一些代码,开发人员使用了子流程rm vs unlink。他们开始使用unlink,然后切换到subprocess.call(['rm','-f',file_path])
。我只是想了解他们为什么会这样做,以及性能是否有所提高?因为没有任何内置的删除文件或文件夹的方法是可靠的,即使您可能找到了所有的解决方法。
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