Search code examples
pythonstdin

Using sys.stdin.readline() to read multiple lines from cmd in Python


I'd like to type in my input from command lines after running

if __name__ == "__main__":
    data = list(map(int, sys.stdin.readline().split()))
    print(data)
    n, capacity = data[0:2]
    values = data[2:(2 * n + 2):2]
    weights = data[3:(2 * n + 2):2]

A sample input could be:

2 40
20 2
30 3

My questions are:
1) How to create the list data using my input?
2) How can I let Python know I have finished the input and it should execute the rest of the code?


Solution

  • The solution to this problem depends on the OS you're using.
    Basically, if you want multiline input, you'll have to use sys.stdin.read() instead of sys.stdin.readline(). Since sys.stdin is a file-like object in Python, the read() method will read until it reaches the end of a file. It is marked by a special character EOF (end-of-file). On different OS'es there is a different way of sending it.

    On Windows:
    Press Ctrl+Z after your input and then press Enter:

    2 10
    20 2
    30 3
    ^Z
    

    On a Unix-based OS:
    Press Ctrl+D after your input. No Enter is required (I believe)

    If you want to get a list [2, 10, 20, 2, 30, 3] from your input, you're fine. The split() method splits by whitespace (spaces, newlines, etc.).