How to read user input until EOF?
PythonStringInputEofPython 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