How to read user input until EOF?

PythonStringInputEof

Python Problem Overview


My current code reads user input until line-break. But I am trying to change that to a format, where the user can write input until strg+d to end his input.

I currently do it like this:

input = raw_input ("Input: ")

But how can I change that to an EOF-Ready version?

Python Solutions


Solution 1 - Python

In Python 3 you can iterate over the lines of standard input, the loop will stop when EOF is reached:

from sys import stdin

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

line includes the trailing \n character

Run this example online: https://ideone.com/rUXCIe


This might be what most people are looking for, however if you want to just read the whole input until EOF into a single variable (like OP), then you might want to look at this other answer.

Solution 2 - Python

Use file.read:

input_str = sys.stdin.read()

According to the documentation:

> file.read([size]) > > Read at most size bytes from the file (less if the read hits EOF > before obtaining size bytes). If the size argument is negative or > omitted, read all data until EOF is reached.

>>> import sys
>>> isinstance(sys.stdin, file)
True

BTW, dont' use input as a variable name. It shadows builtin function input.

Solution 3 - Python

You could also do the following:

acc = []
out = ''
while True:
    try:
        acc.append(raw_input('> ')) # Or whatever prompt you prefer to use.
    except EOFError:
        out = '\n'.join(acc)
        break

Solution 4 - Python

With sys.stdin.readline() you could write like this:

import sys

while True:
    input_ = sys.stdin.readline()
    if input_ == '':
        break
    print type(input_)
    sys.stdout.write(input_)

Remember, whatever your input is, it is a string.

For raw_input or input version, write like this:

while True:
    try:
        input_ = input("Enter:\t")
        #or
        _input = raw_input("Enter:\t")
    except EOFError:
        break
    print type(input_)
    print type(_input)
    print input_
    print _input

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSaphireView Question on Stackoverflow
Solution 1 - PythonarekolekView Answer on Stackoverflow
Solution 2 - PythonfalsetruView Answer on Stackoverflow
Solution 3 - PythonJoel CornettView Answer on Stackoverflow
Solution 4 - PythonPet BView Answer on Stackoverflow