EOFError: EOF when reading a line
python, python-3.x
Solution
width, height = map(int, input().split())
def rectanglePerimeter(width, height):
return ((width + height)*2)
print(rectanglePerimeter(width, height))
Running it like this produces:
% echo "1 2" | test.py
6
I suspect IDLE is simply passing a single string to your script. The first `input()` is slurping the entire string. Notice what happens if you put some print statements in after the calls to `input()`:
width = input()
print(width)
height = input()
print(height)
Running `echo "1 2" | test.py` produces
1 2
Traceback (most recent call last):
File "/home/unutbu/pybin/test.py", line 5, in <module>
height = input()
EOFError: EOF when reading a line
Notice the first print statement prints the entire string `'1 2'`. The second call to `input()` raises the `EOFError` (end-of-file error).
So a simple pipe such as the one I used only allows you to pass one string. Thus you can only call `input()` once. You must then process this string, split it on whitespace, and convert the string fragments to ints yourself. That is what
width, height = map(int, input().split())
does.
Note, there are other ways to pass input to your program. If you had run `test.py` in a terminal, then you could have typed `1` and `2` separately with no problem. Or, you could have written a program with pexpect to simulate a terminal, passing `1` and `2` programmatically. Or, you could use argparse to pass arguments on the command line, allowing you to call your program with
test.py 1 2
Problem
I am trying to define a function to make the perimeter of a rectangle. Here is the code: ``` width = input() height = input() def rectanglePerimeter(width, height): return ((width + height)*2) print(rectanglePerimeter(width, height)) ``` I think I haven't left any arguments opened or anything like that.