[英]When using sys.stdin.read(), why I am not able to input from keyboard?
我的代码如下:
def function(a, b):
while a != 0 and b != 0:
...
return x
if __name__ == "__main__":
input = sys.stdin.read()
a, b = map(int, input.split())
print(function(a, b))
当我尝试运行它时,该程序没有给我输入的机会。
我收到以下回溯消息:
ValueError: not enough values to unpack (expected 2, got 0)
有人可以告诉我原因以及如何输入测试程序的信息。
非常感谢。
sys.stdin.read()
将读取stdin
直到达到EOF。 通常,当该流被另一端(即通过提供输入的任何内容)关闭时,会发生这种情况。
如果您像cat inputfile.txt | your_program
这样运行程序,这将起作用cat inputfile.txt | your_program
cat inputfile.txt | your_program
。 但是当stdin
连接到您的终端时,它将仅以交互模式不断读取,因此从另一端关闭它的唯一方法是关闭终端。
严格来说,您可以通过在一行上单独输入一个EOF字符(在Unix中为Ctrl-D
,在Windows中为Ctrl-Z
read()
停止read()
,这在常规的Python控制台中有效。 但是在IPython中,此技术不起作用:在Windows中,我将Ctrl-D
为\\x04
,将Ctrl-Z
视为空白行,并且都不会停止读取(这是错误还是设计上的另一个问题)。
所以,
input()
代替输入一行,或者 如果您需要多行输入,请使用限制从stdin
读取多少的内容:
ll=[] while True: l = input() # or sys.stdin.readline().rstrip() if not l: break ll.append(l)
这样,您可以通过输入空白行来阻止程序要求更多输入。
最后,有sys.stdin.isatty()
,您可以根据输入是否为交互式来调用不同的代码(但是对于您的任务,这可能是一个过大的选择)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.