Czy istnieje sposób zapisu danych binarnych do sys.stdout w Pythonie 2.x? W Pythonie 3.x możesz po prostu użyć sys.stdout.buffer (lub odłączyć standardowe wyjście, etc ...), ale nie znalazłem żadnych rozwiązań dla Pythona 2.5/2.6.Python 2.x - Napisz wyjście binarne na standardowe wyjście?
EDIT, Rozwiązanie: Od linku ChristopheD jest poniżej:
import sys
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
EDIT: próbuję naciskać plik PDF (w postaci binarnej) do stdout do serwowania się na serwerze WWW. Kiedy próbuję zapisać plik przy użyciu sys.stdout.write, dodaje on wszystkie rodzaje powrotów karetki do strumienia binarnego, który powoduje, że plik PDF jest uszkodzony.
EDYCJA 2: W przypadku tego projektu, muszę uruchomić na serwerze Windows, niestety, więc rozwiązania dla systemu Linux są obecnie niedostępne.
Wystarczy Dummy Przykład (odczyt z pliku na dysku, zamiast generować w locie, tak więc wiemy, że kod pokolenie nie jest problem):
file = open('C:\\test.pdf','rb')
pdfFile = file.read()
sys.stdout.write(pdfFile)
Kiedy zrobiłeś 'sys.stdout.write()' co nie działało? –
Zobacz powyżej dla wyjaśnienia, ale problem jest w zasadzie, że python dodaje zwraca karetki, gdy próbuje konwertować strumień binarny na ciąg do pisania. – Eavesdown
Czy 'sys.stdout = os.fdopen (1," wb ")' działa, aby wyeliminować konwersje w trybie tekstowym? (Będziesz nadal potrzebował użyć sys.stdout.write, jeśli nie chcesz, aby NL-y były drukowane.) (Http://docs.python.org/library/os.html#os.fdopen) –