Search code examples
pythonsys

taking multiline input with sys.stdin


I have the following function:

def getInput():
    # define buffer (list of lines)
    buffer = []
    run = True
    while run:
        # loop through each line of user input, adding it to buffer
        for line in sys.stdin.readlines():
            if line == 'quit\n':
                run = False
            else:
                buffer.append(line.replace('\n',''))
    # return list of lines
    return buffer

which is called in my function takeCommands(), which is called to actually run my program.

However, this doesn't do anything. I'm hoping to add each line to an array, and once a line == 'quit' it stops taking user input. I've tried both for line in sys.stdin.readlines() and for line sys.stdin, but neither of them register any of my input (I'm running it in Windows Command Prompt). Any ideas? Thanks


Solution

  • So, took your code out of the function and ran some tests.

    import sys
    buffer = []
    while run:
        line = sys.stdin.readline().rstrip('\n')
        if line == 'quit':
            run = False
        else:
            buffer.append(line)
    
    print buffer
    

    Changes:

    • Removed the 'for' loop
    • Using 'readline' instead of 'readlines'
    • strip'd out the '\n' after input, so all processing afterwards is much easier.

    Another way:

    import sys
    buffer = []
    while True:
        line = sys.stdin.readline().rstrip('\n')
        if line == 'quit':
            break
        else:
            buffer.append(line)
    print buffer
    

    Takes out the 'run' variable, as it is not really needed.