2012-04-11 11 views
11

¿Es posible hacer una secuencia de comandos python que eliminará el archivo .py al final de su ejecución (auto-eliminar) en Windows?¿Cómo hacer que las secuencias de comandos se eliminen automáticamente al final de la ejecución?

+0

¿Por qué quieres esto? – delnan

+0

Puedo pensar en algunas razones;) –

+0

Para actualizar una secuencia de comandos de usar un socket de red, necesito eliminar la secuencia de comandos original después de recibir la actualizada –

Respuesta

3

No estoy seguro si eliminar un archivo mientras está en la memoria sería una buena idea. Intente ejecutar un archivo por lotes desde el script que cierra el proceso del script, luego borra el archivo del script.

Puede haber un método nativo para autodestruir una secuencia de comandos, pero no tengo conocimiento de ello.

EDIT: Aquí está un ejemplo sencillo de cómo se podría lograr esto usando el método que he descrito:

En el guión

# C:\test.py 
import os 
os.startfile(r"C:\sampleBatch.bat") 

En el lote

# C:\sampleBatch.bat 
TASKKILL /IM "process name" #For me, this was "ipy64.exe" because I use IronPython. 
DEL "C:\test.py" 

Usted no puede incluso necesita matar el proceso para eliminar el archivo, pero es más seguro hacerlo. Espero que esto ayude.

+0

¿Y hay una manera de autodestruirse el archivo por lotes después de cerrar la ¿guión? –

+0

El archivo por lotes debería poder destruir el archivo al cerrar el proceso. Utilice el comando DEL "scriptpathhere" en el archivo por lotes para hacerlo. Pondré un pequeño fragmento en un segundo. – covertCoder

+0

Agregado en algunos códigos de muestra para usted. – covertCoder

6

De esta manera su programa no depende del sistema operativo.

from os import remove 
from sys import argv 

remove(argv[0]) 

Los puntos de bonificación: Al analizar los argumentos de la muy primer argumento que se ponga en sys.argv es igual a "ruta-a-nombre de fichero/filename.py"

3

respuesta de Neomind parece para hacer el truco Pero si le molesta eliminar el archivo mientras está en la memoria, y está buscando una solución de python pura, entonces podría usar un subproceso para crear un nuevo proceso con el propósito explícito de eliminar su archivo de script original. Algo como esto debería funcionar:

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

Es probable que no sería necesario el tiempo de espera en allí, pero he añadido es sólo para asegurarse de que el proceso de la escritura original se ha dado el tiempo suficiente para cerrar en sí.

+0

En Python 3, debe agregar 'shell = True'. –

0

No es un método bastante sencillo:

import os 

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

Si usted está enfrentando problemas, coloque una 'r' antes de la marca a partir citas.

0

Sí, se puede utilizar el siguiente:

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

Este script se puede modificar, por supuesto, pero además de que esto debería funcionar

Cuestiones relacionadas