2012-04-11 19 views
11

Pencerenin içinde yürütme (kendi kendine silme) sonunda .py dosyasını silecek bir python betiği yapmak mümkün mü?Komut dosyası yürütme sonunda otomatik olarak nasıl silinir?

+0

Neden bu isteyeyim çalışması gerekir? – delnan

+0

Birkaç nedenden ötürü düşünebilirim;) –

+0

Bir ağ bağdaştırıcısını kullanarak bir komut dosyasını güncelleştirmek için, güncellenmiş bir tane –

cevap

3

Belleği boşken bir dosyayı sildiğimden emin olmak iyi bir fikir olabilir. Komut dosyasından komut dosyasını kapatan bir toplu iş dosyasını çalıştırmayı deneyin ve komut dosyasını siler.

Bir komut dosyasını kendi kendine imha etmek için yerel bir yöntem olabilir, ancak bunun farkında değilim. Burada ben açıklanan yöntemi kullanarak bunu gerçekleştirmek nasıl basit bir örneğidir::

DÜZENLEME toplu olarak komut

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

yılında

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

Şunları yapamazsınız Dosyanın silinmesi için işlemi bile bitirmesi gerekir, ancak bunu yapmak daha güvenlidir. Bu yardımcı olur umarım.

+0

aldıktan sonra özgün komut dosyasını silmem gerekir. Ayrıca, kapattıktan sonra toplu dosyayı yok etmenin bir yolu var mı? senaryo? –

+0

Toplu iş dosyası, işlemin kapatılması sırasında dosyayı yok edebilmelidir. Bunu yapmak için toplu iş dosyasındaki DEL "scriptpathhere" komutunu kullanın. Bir saniyede küçük bir snippet koyacağım. – covertCoder

+0

Bazı örnek kodlarda sizin için eklendi. – covertCoder

6

Bu şekilde programınızı işletim sistemi bağımlı hale getirir.

from os import remove 
from sys import argv 

remove(argv[0]) 

Bonus puanlar: argümanlardır sen sys.argv olsun çok ilk argüman edilir ayrıştırma zaman "yol-dosya ismi/filename.py"

3

Neomind cevabı görünüyor eşittir hile yapmak. Ancak, dosyayı belleğe alırken silmeniz sizi rahatsız ediyorsa ve salt bir python çözümü arıyorsanız, orijinal betik dosyanızı silmenin açık bir amacı ile yeni bir işlem oluşturmak için alt işlemi kullanabilirsiniz.

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

Muhtemelen orada zaman aşımı gerek olmazdı ama bu sadece orijinal komut süreç kendini kapatmak için yeterli zaman verilmiş olduğundan emin olmak için ekledik: Böyle bir şey çalışmalıdır.

import os 

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

sorunlarla karşı karşıya iseniz, başlangıç ​​alıntılar işareti önce 'r' yerleştirin:

+0

Python 3'te 'shell = True' öğesini eklemelisiniz. –

0

oldukça basit bir yöntem yoktur.

0

Evet, kullanabilirsiniz aşağıdaki:

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

Bu komut elbette değiştirilebilir, ama bunun yanı sıra bu

İlgili konular