Как изменить стандартный ввод в блокноте jupyter? - PullRequest
0 голосов
/ 27 апреля 2018

Я хотел бы назначить файл для 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 голосов
/ 28 апреля 2018

Вы можете прочитать файл в буфер в памяти и затем направить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...