Windowsでの実行(自己削除)の最後に.pyファイルを削除するPythonスクリプトを作成することは可能ですか?
6 に答える
このようにして、プログラムはOSに依存しなくなります。
from os import remove
from sys import argv
remove(argv[0])
ボーナスポイント:引数を解析する場合、sys.argvで取得する最初の引数は、「 path-to-filename/filename.py」と同じです。
Neomindの答えはうまくいくようです。ただし、メモリ内にあるファイルを削除するのが面倒で、純粋なPythonソリューションを探している場合は、サブプロセスを使用して、元のスクリプトファイルを削除するという明確な目的を持つ新しいプロセスを作成できます。このようなものが機能するはずです:
import sys, subprocess
subprocess.Popen("python -c \"import os, time; time.sleep(1); os.remove('{}');\"".format(sys.argv[0]))
sys.exit(0)
おそらくそこにタイムアウトは必要ないでしょうが、元のスクリプトのプロセスがそれ自体を閉じるのに十分な時間を与えられていることを確認するために、タイムアウトを追加しました。
メモリ内にあるファイルを削除することをお勧めします。スクリプトからバッチファイルを実行して、スクリプトプロセスを閉じてから、スクリプトファイルを削除してみてください。
スクリプトを自己破壊するネイティブメソッドがあるかもしれませんが、私はそれを認識していません。
編集:これは私が説明した方法を使用してこれを達成する方法の簡単な例です:
スクリプト内
# C:\test.py
import os
os.startfile(r"C:\sampleBatch.bat")
バッチで
# C:\sampleBatch.bat
TASKKILL /IM "process name" #For me, this was "ipy64.exe" because I use IronPython.
DEL "C:\test.py"
ファイルを削除するためにプロセスを強制終了する必要はないかもしれませんが、そうする方が安全です。お役に立てれば。
かなり簡単な方法があります:
import os
os.remove("insert the file's path")
問題が発生している場合は、開始引用符の前に「r」を付けてください。
はい、次を使用できます。
import os
import sys
import subprocess
# execute and remove after run
(Your python code)
# end of file
dir = os.getcwd()
os.remove(dir+'\%s' % sys.argv[0])
このスクリプトはもちろん変更できますが、それ以外にこれは機能するはずです
atexit
モジュールを利用することもできます。
import os, atexit
atexit.register(lambda file = __file__: os.remove(file))