2012-12-07 45 views
6

我想刪除我的應用服務器的一些日誌文件,而不關閉我的服務器。我可以使用什麼命令來使用Python來執行此操作,例如Linux系統中的rm -rf如何在Linux上使用rm -rf強制刪除?

請幫忙。

+2

你看過[Python庫參考](http://docs.python.org/3/library/os.html#module-os)嗎? –

+1

'force'刪除?你有沒有用的代碼有問題嗎? –

+0

你好,我想刪除使用WLST的日誌文件 – user1344022

回答

6
#!/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"); 

以上功能將遞歸刪除任何目錄...

+0

嗨,謝謝你的回覆,但問題是我想通過使用帶有Pythan的WLST來刪除Weblogic日誌文件。 – user1344022

+0

這似乎應該適用於目錄,但它不等同於'rm -rf':如果您嘗試刪除單個文件,則會出錯。另外,儘可能使用Python標準庫中經過良好測試的代碼,而不是編寫自己的代碼。請參閱我的四行'rm -rf'函數:http://stackoverflow.com/a/9559881/260491 –

+0

您不需要編寫自己的代碼。 Python的標準庫已經有遞歸刪除的shutil.rmtree() –

6

shutil是你在這種情況下的朋友。

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

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

當谷歌引用的最高結果是這個問題時,其他人是否看到這種躊躇響應中的諷刺? – RussellStewart

+0

雖然有用,但rmtree並不等同:如果嘗試刪除單個文件,則會出錯。在這裏看到我的答案:http://stackoverflow.com/a/9559881/260491 –

0

可以使用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 
+0

我正在審查一些代碼和開發人員使用的子進程rm vs unlink。他們首先使用unlink,然後切換到'subprocess.call(['rm','-f',file_path])'。我只是想明白爲什麼他們會這樣做,如果性能有所提高? – radtek

4

是您的服務器運行Linux,或者是隻是一個例子嗎?

在Python上,shutil.rmtree()相當於rm -r(因爲@Alex已經回答)。所有的python刪除命令(os.unlink(), os.rmdir())都沒有檢查,所以它們總是等於rm -f

但是,如果您在Windows上,OS will not let you刪除仍然打開的文件;你會得到一個例外。 AFAIK沒有一個沒有特權的流程可以做到這一點。

+0

HI alexis,我的服務器在linux機器上運行。問題是我沒有權限以Weblogic用戶身份登錄。所以我曾經以沒有權限刪除Weblogic日誌文件的用戶身份登錄。我在Pythan上使用WLST。有沒有辦法使用WLST刪除文件。 – user1344022

+0

不知道什麼是WLST或Weblogic。要刪除文件,您必須能夠在有權刪除它的進程下運行_some_程序。如果python的'os.unlink()'不能這樣做,那麼在_any_編程語言中就沒有什麼可以做的了:操作系統不會讓你。 – alexis

+0

雖然很有用,但'rmtree'不是等價的:如果您嘗試刪除單個文件,則會出錯。在這裏看到我的答案:http://stackoverflow.com/a/9559881/260491 –

相關問題