【问题标题】:How to make scripts auto-delete at the end of execution?如何使脚本在执行结束时自动删除?
【发布时间】:2012-04-11 19:27:24
【问题描述】:

是否可以制作一个 python 脚本,在 Windows 中执行(自删除)结束时删除 .py 文件?

【问题讨论】:

  • 你为什么要这个?
  • 我能想到几个原因 ;)
  • 为了使用网络套接字更新脚本,我需要在收到更新后删除原始脚本

标签: python windows self-destruction


【解决方案1】:

这种方式使您的程序不依赖于操作系统。

from os import remove
from sys import argv

remove(argv[0])

奖励积分: 解析参数时,您在 sys.argv 中获得的第一个参数等于“path-to-filename/filename.py

【讨论】:

    【解决方案2】:

    Neomind 的回答似乎可以解决问题。但是,如果在内存中删除文件让您感到困扰,并且您正在寻找纯 python 解决方案,那么您可以使用 subprocess 创建一个新进程,其明确目的是删除原始脚本文件。像这样的东西应该可以工作:

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

    您可能不需要在其中设置超时,但我添加它只是为了确保原始脚本中的进程有足够的时间自行关闭。

    【讨论】:

    • 在 Python 3 中,您必须添加 shell=True
    【解决方案3】:

    我不确定在内存中删除文件是否是个好主意。尝试从关闭脚本进程的脚本运行批处理文件,然后删除脚本文件。

    可能有自毁脚本的本地方法,但我不知道。

    编辑:这是一个简单的示例,说明如何使用我描述的方法完成此操作:

    在脚本中

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

    您甚至可能不需要终止进程来删除文件,但这样做更安全。希望这会有所帮助。

    【讨论】:

    • 有没有办法在关闭脚本后自毁批处理文件?
    • 批处理文件应该能够在进程关闭时销毁文件。使用批处理文件中的 DEL "scriptpathhere" 命令来执行此操作。我会在几秒钟内放一个小sn-p。
    • 批处理文件应该能够自行删除,如果它是它做的最后一件事的话。但在这种情况下,最后会出现错误 »找不到批处理文件«。
    【解决方案4】:

    是的,您可以使用以下内容:

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

    这个脚本当然可以修改,但除此之外应该可以工作

    【讨论】:

    • 子进程是做什么用的?
    【解决方案5】:

    有一个比较简单的方法:

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

    如果您遇到问题,请在开始的引号前加一个“r”。

    【讨论】:

      【解决方案6】:

      您也可以使用atexit 模块。

      import os, atexit
      
      atexit.register(lambda file = __file__: os.remove(file))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        相关资源
        最近更新 更多