2012-04-04 8 views
3

Wenn ich das folgende Skript ausführen, verbleibt eine .bak-Sicherungsdatei im Dateisystem. Wie schließe ich() die Dateien richtig, damit die Backups gelöscht werden?Python - Ersatz inplace - Entfernen von .bak Backup-Dateien mit close()?

#!C:\Python27\python.exe 
import os 
myRelease = os.environ.get("BUILD_STRING") 
myVersion = os.environ.get("VERSION_STRING") 
import fileinput 
import re 
files = ["C:\Projects\FileToSub.sbs"] 
for line in fileinput.FileInput(files,inplace=1): 
    line = re.sub('whatever, thing', line) 
    print line, 

Antwort

1

Das fileinput Modul kümmert sich um die Backup-Dateien zu löschen.

Ich bin mir nicht ganz sicher, was Sie getestet haben, aber Ihr Python-Code enthält Fehler. A 'erraten' und 'korrigiert' Version:

import fileinput 
import re 
files = ["FileToSub1.sbs", "FileToSub2.sbs"] 
for line in fileinput.FileInput(files, inplace=1): 
    line = re.sub('whatever', 'thing', line) 
    print line, 

Im Strace Ausgabe, die Sie sehen können, dass die Dateien automatisch entfernt werden:

unlink("FileToSub2.sbs.bak")   = -1 ENOENT (No such file or directory) 
rename("FileToSub2.sbs", "FileToSub2.sbs.bak") = 0 
open("FileToSub2.sbs.bak", O_RDONLY) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=30, ...}) = 0 
fstat(3, {st_mode=S_IFREG|0644, st_size=30, ...}) = 0 
open("FileToSub2.sbs", O_WRONLY|O_CREAT|O_TRUNC, 0100644) = 4 
fcntl(4, F_GETFL)      = 0x8001 (flags O_WRONLY|O_LARGEFILE) 
fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf3a988000 
lseek(4, 0, SEEK_CUR)     = 0 
fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 
chmod("FileToSub2.sbs", 0100644)  = 0 
fstat(3, {st_mode=S_IFREG|0644, st_size=30, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf3a987000 
read(3, "whatever\nfile\nthing\nline\nwhas\n", 8192) = 30 
read(3, "", 4096)      = 0 
read(3, "", 8192)      = 0 
write(4, "thing\nfile\nthing\nline\nwhas\n", 27) = 27 
close(4)        = 0 
munmap(0x7fdf3a988000, 4096)   = 0 
close(3)        = 0 
munmap(0x7fdf3a987000, 4096)   = 0 
unlink("FileToSub2.sbs.bak")   = 0 
+0

Magisch in der Tat :) – Dikei

+0

Aber die Backup-Datei existiert immer noch für mich! Vielleicht liegt es daran, dass ich ein Python-Skript in Jenkins ausführe? – shanz

+0

Kannst du die "strace" -Ausgabe zu der Frage hinzufügen? –

2

können Sie die close Methode, z.

myfile.close()

Warum Sie die Datei nicht entfernen Sie die os.remove verwenden? Sie können dies tun:

import os 

# call this after the end of your script 
os.remove("C:\Projects\FileToSub.subs.bak") 
+0

Derzeit ... Import stat os.chmod ("C: \ Projekte \ FileToSub.sbs.bak", stat.S_IWRITE) os.remove ("C: \ Projekte \ FileToSub.sbs.bak") ' Scheint, den Job zu tun, fühlt sich aber falsch. – shanz

+0

vielleicht ist Andreas Florath näher dran, was Sie wollen. Siehe meinen Kommentar zu seiner Antwort! –