Cmd and Git bash have a different result when run a Python code

前端 未结 1 1168
感动是毒
感动是毒 2021-01-12 03:58

Platform: Git bash MINGW64, Windows 7, 64 CMD When I run a Python code from Learn Python The Hard Way ex11. The code is simple.

print \"How old are you?\",
a         


        
1条回答
  •  被撕碎了的回忆
    2021-01-12 04:33

    So I had a look at this and tried a couple of different ways of writing what you have there, and they all acted the same way. Digging into it some more I came across https://code.google.com/p/mintty/issues/detail?id=218. Key from this is andy.koppe's reply:

    The key to the problem is that stdout's default buffering mode depends on the type of device: unbuffered for a console, buffered for a pipe. This means that in a console the output will appear immediately, whereas in mintty it will only appear once the buffer is either full or flushed, as happens at the end of main().

    Windows Console prints text to the screen as soon as possible, while mingw (git bash) will wait until the application tells it to update the screen.

    So to get it to behave the same in both, you will need to flush the buffer to the screen after each print. How to flush output of Python print? has information about how to do this, but it comes down to the following:

    import sys
    
    print "How old are you?"
    sys.stdout.flush()
    age = raw_input()
    print "How tall are you?"
    sys.stdout.flush()
    height = raw_input()
    print "How much do you weigh?"
    sys.stdout.flush()
    weight = raw_input()
    
    print "So, you're %r old, %r tall and %r heavy." % (age, height, weight)
    

    Alternatively you can run it in mingw using the -u command, which will stop python from buffering output in mingw.

    python -u file.py
    

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