当我在 Python 中使用标准输出时,Powershell 不能显示字符串吗?



它在VS Code中运行良好,但在powershell中,它确实会提示用户输入,但不会在"stdout"中显示字符串。 下面是一段示例代码:

import sys

def get_int():
sys.stdout.write("Enter number(s). ")
return map(int, sys.stdin.readline().strip().split())

def get_float():
sys.stdout.write("Enter number(s). ")
return map(float, sys.stdin.readline().strip().split())

def get_list_of_int():
sys.stdout.write("Enter numbers followed by space. ")
return list(map(int, sys.stdin.readline().strip().split()))

def get_string():
sys.stdout.write("Enter string. ")
return sys.stdin.readline().strip()

a, b, c, d = get_int()
e, f, g = get_float()
arr = get_list_of_int()
str = get_string()

为什么当我在 Python 中使用 stdout 时,Powershell 不能显示字符串?

由于stdout设备接口可能会缓冲对其的写入,因此请在无缓冲模式下运行python:

PS C:> python -u script.py

或在读取stdin之前显式刷新缓冲区:

def get_int():
sys.stdout.write("Enter number(s). ")
sys.stdout.flush()
return map(int, sys.stdin.readline().strip().split())

或者,您可以将sys.stdout替换为为您执行此操作的包装器:

class Unbuffered(object):
def __init__(self, stream):
self.stream = stream
def write(self, data):
self.stream.write(data)
self.stream.flush()
def writelines(self, datas):
self.stream.writelines(datas)
self.stream.flush()
def __getattr__(self, attr):
return getattr(self.stream, attr)
sys.stdout = Unbuffered(sys.stdout)
# this will now flush automatically before calling stdin.readline()
sys.stdout.write("Enter something: ")
numbers = map(int, sys.stdin.readline().strip().split())

最新更新