2015-12-20 14 views
19

devo tradurre un codice python 2 Into Python 3 e non riesco a capire che cosa fa print >> fare e come devo scriverlo in Python 3.Cosa fa "print >>" in python?

print >> sys.stderr, '--' 
print >> sys.stderr, 'entrada1: ', entrada1 
print >> sys.stderr, 'entrada2: ', entrada2 
print >> sys.stderr, '--' 
+0

Puoi condividere il codice di cui stai parlando? – Mureinik

+0

È molto lungo ma questa è una parte di esso –

+1

Non potresti semplicemente inserire questo tramite 2to3? – user2357112

risposta

21

La parte >> sys.stderr rende l'uscita print dichiarazione stderr invece di stdout in Python 2.

per citare il documentation:

print ha anche una forma estesa, definita dalla seconda porzione delSintassidescritta sopra. Questo modulo viene a volte indicato come "stampa chevron". In questo modulo, la prima espressione dopo lo >> deve corrispondere a per valutare un oggetto "tipo file", in particolare un oggetto che ha un metodo write() come descritto sopra. Con questo modulo esteso, le espressioni successive vengono stampate su questo oggetto file. Se la prima espressione viene valutata su None, viene utilizzato come file sys.stdout come file per l'output .

In Python 3 utilizza l'argomento file alla funzione print():

print("spam", file=sys.stderr) 
7

per convertire questi da Python 2 a Python 3, modificare:

print >>sys.stderr, 'Hello' 

a:

print('Hello', file=sys.stderr) 
2

Per p TAMPA a stderr nota

sys.stderr.write() 

è versioni portabile, ma è necessario aggiungere una nuova riga, a differenza print; per esempio

import sys 

errlog = sys.stderr.write 
errlog("an error message\n") 
+1

Si noti inoltre che ['.write()'] (https://docs.python.org/2/library/stdtypes.html#file.write) si aspetta che il suo argomento sia una stringa. Per scrivere qualcosa di diverso da una stringa, è necessario prima convertirlo in una stringa: 'sys.stderr.write (str (['the answer', 42]))' –