Cmd And Git Bash Have A Different Result When Run A Python Code
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?", age = raw_input() print "How tall are you?", height = raw_input() print "How much do you weigh?", weight = raw_input() print "So, you're %r old, %r tall and %r heavy." % ( age, height, weight)
But they have different result in CMD and Git bash. When I run it using Git bash, the raw_print() will run first.
When you input 3 answers, then it will show the 4 print in the end. When I run it in CMD, it shows normally, one print, one
Can somebody explain it?
EDIT: Actually, my goal is to explain the reason, not to solve this with flush. So It is different with this question
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
- → What are the pluses/minuses of different ways to configure GPIOs on the Beaglebone Black?
- → Django, code inside <script> tag doesn't work in a template
- → React - Django webpack config with dynamic 'output'
- → GAE Python app - Does URL matter for SEO?
- → Put a Rendered Django Template in Json along with some other items
- → session disappears when request is sent from fetch
- → Python Shopify API output formatted datetime string in django template
- → Shopify app: adding a new shipping address via webhook
- → Shopify + Python library: how to create new shipping address
- → shopify python api: how do add new assets to published theme?
- → Access 'HTTP_X_SHOPIFY_SHOP_API_CALL_LIMIT' with Python Shopify Module