2012-12-07 12 views
6

Sunucumu kapatmadan Uygulama sunucumun bazı günlük dosyalarını kaldırmak istiyorum. Bunu Linux sistemlerinde rm -rf gibi Python kullanarak yapmak için hangi komutu kullanabilirim?Linux'ta rm -rf gibi Python'da zorlama nasıl kaldırılır?

Lütfen

Yardım edin. yinelemeli herhangi dizini siler işlevi Üstü

+2

[Python kitaplığı başvurusuna] baktınız mı (http://docs.python.org/3/library/os.html#module-os)? –

+1

'Zorlama' kaldırılsın mı? Çalışmamış kodla ilgili herhangi bir sorun yaşadınız mı? –

+0

HI WLST – user1344022

cevap

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

HI kullanarak günlük dosyalarını silmek istiyorum Yanıt için teşekkürler, ancak sorun Weblogic log dosyasını Pythan ile WLST kullanarak silmek istiyorum. – user1344022

+0

Bu, dizinler için çalışacak gibi görünüyor, ancak 'rm -rf' değerine eşdeğer değil: tek bir dosyayı kaldırmaya çalıştığınızda hata çıkıyor. Ayrıca, Python'un standart kitaplığından, iyi bir şekilde test edilmiş kodu kendi yazmanızı değil, mümkün olduğunda kullanmak en iyisidir. Benim dört satırlık rm -rf fonksiyonunu burada görebilirsiniz: http://stackoverflow.com/a/9559881/260491 –

+0

Kendi yazman gerekmiyor. Python'un standart kütüphanesi zaten yinelenen –

6

shutil bu durumda arkadaşın.

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

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

'u silen shutil.rmtree() yöntemine sahiptir. Google referansındaki en yüksek sonuç bu soruyu sorduğunda, bu gizli yanıtta ironiyi gören var mı? – RussellStewart

+0

Yararlı olsa da, "rmtree" eşdeğeri değil: Tek bir dosyayı kaldırmaya çalıştığınızda hata çıkıyor. Cevabımı buraya bakın: http://stackoverflow.com/a/9559881/260491 –

0

Sen subprocess modülünü kullanabilirsiniz :

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

Bazı kodları inceliyorum ve geliştiricinin kullanılan altprogramı rm'ye bağlantısını kesiyorum. Önce bağlantıyı kestiler ve daha sonra altprocess.call (['rm', '-f', file_path]) 'a geçtiler. Sadece bunu neden yaptığını anlamaya çalışıyorum ve eğer performans artışı varsa? – radtek

4

sunucu Linux çalıştıran mi, ya da sadece bir örnek bu? (@Alex zaten cevap gibi) piton günü

, shutil.rmtree()rm -r eşdeğerdir. Tüm python kaldırma komutları (os.unlink(), os.rmdir()) çek olmadan çalışır, bu nedenle her zaman rm -f'a eşdeğerdirler.

Ancak Windows kullanıyorsanız, OS will not let you hala açık olan bir dosyayı silin; Bir istisna alacaksınız. AFAIK, imtiyazsız bir sürecin yapabileceği hiçbir şey yok.

+0

HI alexis, Sunucum linux makinesinde çalışıyor. Sorun, Weblogic kullanıcısı olarak oturum açma iznim yok. Bu yüzden Weblogic Log Dosyasını silme iznine sahip olmayan kullanıcı olarak giriş yaptım. Pythan ile WLST kullanıyorum. WLST kullanarak Dosyaları Silmek için bir yolu var. – user1344022

+0

WLST veya Weblogic'in ne olduğu hakkında bir fikir yok. Bir dosyayı silmek için, silmeye izin veren bir işlem altında _some_ programını çalıştırabilmeniz gerekir. Eğer python 'os.unlink()' bunu yapamazsa, _any_ programlama dilinde yapabileceğiniz hiçbir şey yoktur: İşletim sistemi size izin vermez. – alexis

+0

Yararlı olsa da, "rmtree" eşdeğeri değil: Tek bir dosyayı kaldırmaya çalıştığınızda hata çıkıyor. Cevabımı buraya bakın: http://stackoverflow.com/a/9559881/260491 –

İlgili konular