它在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())