【问题标题】:Python Unbuffered Mode Causes Problems in WindowsPython 无缓冲模式导致 Windows 出现问题
【发布时间】:2015-10-02 15:10:47
【问题描述】:

运行以下命令,然后尝试运行交互式命令失败...

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

更简单的测试也失败了:

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

SyntaxError: invalid syntax

我在 Windows 7 上使用 Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)] on win32

【问题讨论】:

  • 成功了!如果您将此添加为答案,我会接受。

标签: python windows python-2.6 unbuffered


【解决方案1】:

解析器在 Windows "\r\n" 行尾出现问题。 Python 的无缓冲模式也是二进制模式,C 运行时不会将 "\r\n" 转换为 Python 期望的 "\n" 换行符。尝试在第一个提示符处输入以下内容以切换回文本模式:import os, msvcrt; _ = msvcrt.setmode(0, os.O_TEXT) #。例如:

>>> 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

【讨论】:

    【解决方案2】:

    以下是该问题的解决方法:

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

    不幸的是,这是我能想到的最好的多行语句:

    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
    

    【讨论】:

    • 不幸的是,我仍然无法弄清楚如何执行多行操作,例如 for 循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多