2015-10-02 1 views
1

exécutant la commande suivante, puis essayer d'exécuter des commandes interactives échoue ...mode Python Unbuffered provoque des problèmes dans Windows

c:\> python -u -i test.py | tee output.txt 
... test.py output ... 

    File "<stdin>", line 1 

    ^
SyntaxError: invalid syntax 
>>> print "Hi" 
    File "<stdin>", line 1 
    print "Hi" 
      ^

SyntaxError: invalid syntax 

Un test simple échoue aussi:

c:\> python -u 
>>> print "Hi" 
    File "<stdin>", line 1 
    print "Hi" 
      ^

SyntaxError: invalid syntax 

J'utilise Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)] on win32 sur windows 7.

+0

Cela a fonctionné! Si vous ajoutez ceci comme réponse, je l'accepterai. –

Répondre

1

L'analyseur a des problèmes avec les terminaisons de ligne Windows "\r\n". Le mode sans tampon de Python est également en mode binaire, pour lequel le moteur d'exécution C ne traduit pas "\r\n" en caractère de nouvelle ligne "\n" attendu par Python. Essayez d'entrer ce qui suit à la première invite pour revenir en mode texte: import os, msvcrt; _ = msvcrt.setmode(0, os.O_TEXT) #. Par exemple:

>>> import sys, os, msvcrt # 
>>> line = sys.stdin.readline() # 
print "Hi" 
>>> line # 
'print "Hi"\r\n' 

>>> _ = msvcrt.setmode(sys.stdin.fileno(), os.O_TEXT) # 
>>> line = sys.stdin.readline() 
print "Hi" 
>>> line 
'print "Hi"\n' 
>>> print "Hi" 
Hi 
0

Voici une solution de contournement pour le problème:

c:\> python -u 
>>> print "Hi" # This comment prevents the bug 
Hi 

Malheureusement, c'est le meilleur que je peux venir avec des déclarations de plusieurs lignes:

c:\> python -u 
>>> exec ''' # Comments still needed inside string 
... for i in range(4): # 
...  print i # 
... ''' # comment on the end of line 
0 
1 
2 
3 
+0

Malheureusement, je n'arrive toujours pas à comprendre comment faire plusieurs choses comme une boucle 'for'. –