Piszę program, który powinien działać zarówno z python2, jak i python3. W tym celu chciałbym mieć funkcję zapisu na stderr, która działa z obu wersjach python.funkcja do pisania na stderr z python2 i python3
Idealny myślę byłoby coś takiego:
def writeStdErr(message):
if sys.version_info >= (3, 0):
print(message, end = "", file = sys.stderr)
else:
sys.stderr.write(message)
problem z tym, że python2 jest, że druk nie jest funkcją, więc mogę
print(message, end = "", file = sys.stderr)
^
SyntaxError: invalid syntax
mogłem pozbyć to przez dodanie eval:
def writeStdErr(message):
if sys.version_info >= (3, 0):
eval('print(message, end = "", file = sys.stderr)')
else:
sys.stderr.write(message)
jednak nie podoba mi się to rozwiązanie; Myślę, że używanie eval jest złym pomysłem.
Czy ktoś wie coś lepszego/ma lepsze rozwiązanie?
EDIT:
Dla każdego, mającego ten sam problem w przyszłości, następujące rzeczy wydają się utwory:
def writeStdErr(message):
sys.stderr.write(message)
lub
from __future__ import print_function
import sys
def writeStdErr(message):
print(message, file=sys.stderr)
Dzięki wszystkim odpowiedzi
Czy "sys.stderr.write (message)' również nie działa w Pythonie 3? Dlaczego po prostu nie użyć tego dla wszystkich wersji? – jwodder
no sys.stderr.write nie działa niestety pod python3. Właśnie dlatego wybieram sprawdzenie, która wersja python działa – quant
Właśnie testowałem w wersjach 3.1 i 3.3, a 'sys.stderr.write ('foo')' działało w obu. Co się stanie, gdy spróbujesz to zrobić? – jwodder