24

Windowsでの実行(自己削除)の最後に.pyファイルを削除するPythonスクリプトを作成することは可能ですか?

4

6 に答える 6

26

このようにして、プログラムはOSに依存しなくなります。

from os import remove
from sys import argv

remove(argv[0])

ボーナスポイント:引数を解析する場合、sys.argvで取得する最初の引数は、「 path-to-filename/filename.py」と同じです。

于 2013-12-11T23:49:02.577 に答える
10

Neomindの答えはうまくいくようです。ただし、メモリ内にあるファイルを削除するのが面倒で、純粋なPythonソリューションを探している場合は、サブプロセスを使用して、元のスクリプトファイルを削除するという明確な目的を持つ新しいプロセスを作成できます。このようなものが機能するはずです:

import sys, subprocess 
subprocess.Popen("python -c \"import os, time; time.sleep(1); os.remove('{}');\"".format(sys.argv[0]))
sys.exit(0)

おそらくそこにタイムアウトは必要ないでしょうが、元のスクリプトのプロセスがそれ自体を閉じるのに十分な時間を与えられていることを確認するために、タイムアウトを追加しました。

于 2015-04-10T19:49:51.500 に答える
6

メモリ内にあるファイルを削除することをお勧めします。スクリプトからバッチファイルを実行して、スクリプトプロセスを閉じてから、スクリプトファイルを削除してみてください。

スクリプトを自己破壊するネイティブメソッドがあるかもしれませんが、私はそれを認識していません。

編集:これは私が説明した方法を使用してこれを達成する方法の簡単な例です:

スクリプト内

# 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"

ファイルを削除するためにプロセスを強制終了する必要はないかもしれませんが、そうする方が安全です。お役に立てれば。

于 2012-04-11T19:30:29.017 に答える
2

かなり簡単な方法があります:

import os   

os.remove("insert the file's path")

問題が発生している場合は、開始引用符の前に「r」を付けてください。

于 2017-04-19T10:49:46.687 に答える
2

はい、次を使用できます。

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])

このスクリプトはもちろん変更できますが、それ以外にこれは機能するはずです

于 2018-01-19T21:30:37.473 に答える
1

atexitモジュールを利用することもできます。

import os, atexit

atexit.register(lambda file = __file__: os.remove(file))
于 2021-04-30T13:39:09.367 に答える