2012-12-07 13 views
6

私のサーバーをシャットダウンすることなく、私のAppサーバーのいくつかのログファイルを削除したい。 Linuxシステムでrm -rfのようなPythonを使用してこれを行うにはどのようなコマンドを使用できますか?Linuxでrm -rfのようにPythonで強制的に削除するには?

助けてください。再帰的に任意のディレクトリを削除する関数の上

+2

[Pythonライブラリリファレンス](http://docs.python.org/3/library/os.html#module-os)を見ましたか? –

+1

'force'を削除しますか?動作しなかったコードに問題はありましたか? –

+0

HI私は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

HIの返信ありがとうございますが、問題はPythanでWLSTを使用してWeblogicログファイルを削除したいのです。 – user1344022

+0

これはディレクトリのように動作するはずですが、 'rm -rf'と同じではありません。一つのファイルを削除しようとするとエラーになります。また、独自のコードを書くのではなく、可能であれば、Pythonの標準ライブラリから十分にテストされたコードを使用することをお勧めします。私の4行の '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

Googleのリファレンスのトップ結果がこの非常に疑問なのは、 – 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と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を使ってファイルBYを削除する方法があります。 – user1344022

+0

WLSTまたはWeblogicが何であるか分かりません。ファイルを削除するには、削除する権限を持つプロセスの下で_some_ programを実行できる必要があります。もしPythonの 'os.unlink()'がそれを行えないなら、あなたは何もあなたのプログラミング言語で何もできません:OSはあなたに許しません。 – alexis

+0

便利ですが、 'rmtree'は等価ではありません。一つのファイルを削除しようとするとエラーになります。私の答えはこちら:http://stackoverflow.com/a/9559881/260491 –

関連する問題