Probleme mit zipfile unter windows 2000...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

gerold hat geschrieben:Dieser Code erzeugt identische Files beim Aufruf mit

Code: Alles auswählen

python skriptname.py > test2.tar
Hi Jens!

Wenn man die Kommentarzeichen vor den "print"-Anweisungen, die für das CGI notwendig sind, wieder entfernt, dann funktioniert es auch mit XAMPP unter Windows 2000.

Code: Alles auswählen

print "Content-Disposition: attachment; filename=test.tar"
print "Content-Transfer-Encoding: 8bit"
print "Content-Type: application/octet-stream;\n"

# force input/output to binary
if sys.platform == "win32":
    import msvcrt
    msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
[...]
temp.seek(0)
Ich habe dieses Skript soeben getestet.

Hier das gesamte Skript, genau so wie ich es getestet habe. Danach habe ich die Ergebnisse mit "cmp" vom Cygwin verglichen und zum Test mit WinZip geöffnet. Allerdings habe ich nur Textdateien komprimiert. Vielleicht versuche ich es später noch mit anderen Dateien, aber erst mal mache ich Schluß.

Code: Alles auswählen

#!C:\Python24\python.exe
# -*- coding: iso-8859-1 -*-

#~ print "Content-type: text/html; charset=utf-8\n"
#~ import cgitb;cgitb.enable()

import sys, os, posixpath, time, glob
from tempfile import NamedTemporaryFile
from tarfile import TarFile

temp = NamedTemporaryFile(prefix="PyDown_")

tar = TarFile(mode="w", fileobj=temp)

for item in glob.glob("*.txt"):
    tar.add(item)

tar.close()

print "Content-Disposition: attachment; filename=test.tar"

#~ print 'Content-Transfer-Encoding: binary'

print "Content-Transfer-Encoding: 8bit"
print "Content-Type: application/octet-stream;\n"# charset=utf-8\n'



# force input/output to binary
if sys.platform == "win32":
    import msvcrt
    msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)



f = file("test.tar", "wb")

temp.seek(0)

while 1:
    data = temp.read(2048)
    if not data:
        break
    f.write(data)
    sys.stdout.write(data)

f.close()

temp.close()
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich dummie :oops: Ich hatte wahrscheinlich das .seek(0) vergessen, deswegen klappte es nicht mit dem Test-Skript :(

Auf jeden Fall scheint es nun zu klappen!!! Dank dir, für deine Geduld.

Ich Frage mich, warum man überhaupt explizit den stdout auf binär setzten muß?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

jens hat geschrieben:Ich Frage mich, warum man überhaupt explizit den stdout auf binär setzten muß?
Weil Windows sonst aus jedem '\n' ein '\r\n' macht.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wie nett doch Windows ist :evil:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten