gpt4 book ai didi

python - 当我在 Python 中使用 stdout 时,为什么 Powershell 无法显示字符串?

转载 作者:行者123 更新时间:2023-12-02 23:06:47 25 4
gpt4 key购买 nike

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

最佳答案

Why can't Powershell display a string when i use stdout in Python?

因为 stdout 设备接口(interface)可能会缓冲对其的写入,因此要么以无缓冲模式运行 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())

或者你可以replace sys.stdout with a wrapper这对你来说是这样的:

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

关于python - 当我在 Python 中使用 stdout 时,为什么 Powershell 无法显示字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62358056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com