2012-04-11 18 views

risposta

3

Non sono sicuro che l'eliminazione di un file mentre è in memoria sarebbe una buona idea. Prova a eseguire un file batch dallo script che chiude il processo di script, quindi elimina il file di script.

Potrebbe esserci un metodo nativo per autodistruggere uno script, ma non ne sono a conoscenza.

EDIT: Ecco un semplice esempio di come si potrebbe raggiungere questo obiettivo con il metodo che ho descritto:

Nello script

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

Nel lotto

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

utente non può anche bisogno di uccidere il processo per eliminare il file, ma è più sicuro farlo. Spero che questo ti aiuti.

+0

E c'è un modo per autodistruggersi del file batch dopo aver chiuso lo script sceneggiatura? –

+0

Il file batch dovrebbe essere in grado di distruggere il file alla chiusura del processo. Usare il comando DEL "scriptpathhere" nel file batch per farlo. Inserirò un piccolo frammento in un secondo. – covertCoder

+0

Aggiunto in alcuni esempi di codice per te. – covertCoder

6

In questo modo il programma non dipende dal sistema operativo.

from os import remove 
from sys import argv 

remove(argv[0]) 

I punti bonus: Durante l'analisi argomenti il ​​primo argomento molto che si ottiene in sys.argv è uguale a "path-to-filename/filename.py"

3

risposta di Neomind sembra fare il trucco Ma se l'eliminazione del file mentre è in memoria ti infastidisce e stai cercando una soluzione Python pura, puoi utilizzare il sottoprocesso per creare un nuovo processo con lo scopo esplicito di eliminare il tuo file di script originale. Qualcosa del genere dovrebbe funzionare:

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

Probabilmente non avrebbe bisogno il timeout in là, ma ho aggiunto solo per assicurarsi che il processo dal copione originale è stato dato abbastanza tempo per chiudersi.

+0

In Python 3, devi aggiungere 'shell = True'. –

0

v'è un metodo piuttosto semplice:

import os 

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

Se si sta affrontando problemi, collocare una 'r' prima della boa di partenza citazioni.

0

Sì, è possibile utilizzare il seguente:

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

Questo script può essere modificata, ovviamente, ma oltre a questo questo dovrebbe funzionare

Problemi correlati