如何在jupyter笔记本中更改stdin?

时间:2018-04-27 19:51:14

标签: python jupyter-notebook

我想将文件分配给sys.stdin,以便我可以使用input()读取文件的内容。下面的代码按照脚本的预期运行,但是当它用笔记本编写时会出现问题。在调用函数input()之后,它向我显示了一个输入教科书,我不想要,因为我将stdin重新分配给了一个文件。所以,我希望能够读取文件中的行。

import sys
file = open("input.in")
sys.stdin = file
val = input()
print(val)

在我看来笔记本忽略了sys.stdin。我无法找到为什么会发生这种情况以及如何解决它。

感谢。

更新

我最终会覆盖input功能。它会完成这项工作,但我会留下问题,看看是否有人有更好的解决方案。

file = open("input.in")
input = file.readline

1 个答案:

答案 0 :(得分:1)

您可以将文件读取到内存缓冲区,然后指示stdin从中读取。例如,重新显示文件

import sys
import io      # in python2, import StringIO

input_file = open('myfile.txt', 'r')
sys.stdin = io.StringIO(input_file.read())

for line in sys.stdin:
    print(line, end='')

出于您的目的,您可能需要

import sys
import io      # in python2, import StringIO

input_file = open('myfile.txt', 'r')
sys.stdin = io.StringIO(input_file.read())

val = sys.stdin.readline()
# Rest of program using val