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

后端 未结 3 417
醉话见心
醉话见心 2020-12-20 01:53

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         


        
相关标签:
3条回答
  • 2020-12-20 02:08

    If you are on Windows make sure you finish your input with newline, otherwise ^Z (from pressing Ctrl-Z) will be included in your input. Also make sure you use English language layout - https://stackoverflow.com/a/17924627/9205085

    0 讨论(0)
  • 2020-12-20 02:17

    I agree with everything @Leva7 has said. Nonetheless, I'd suggest another solution, which is to use raw_input for Python 2 or input for Python 3 like so:

    args = []
    s = raw_input()                # input() for Python 3
    while s != '':
        args.extend([int(arg) for arg in s.strip().split()])
        s = raw_input()
    

    Of course, that's not a one-liner in any way, but it does the job and it's easy to see how it's done. Plus, no special characters are required at the end of the input.

    0 讨论(0)
  • 2020-12-20 02:20

    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.).

    0 讨论(0)
提交回复
热议问题