The documentation at http://docs.python.org/dev/library/argparse.html explicitly says that "If file is None, sys.stderr is assumed".
However, both print_usage and print_help assume sys.stdout when file=None. The helper method _print_message actually does it right, when called with file=None.