Fix getpass on Windows (Fixes #2547)

This commit is contained in:
Philipp Hagemeister 2014-03-18 14:27:42 +01:00
parent 17286a96f2
commit e68301af21
2 changed files with 12 additions and 2 deletions

View file

@ -56,7 +56,6 @@ __authors__ = (
__license__ = 'Public Domain' __license__ = 'Public Domain'
import codecs import codecs
import getpass
import io import io
import locale import locale
import optparse import optparse
@ -68,6 +67,7 @@ import sys
from .utils import ( from .utils import (
compat_getpass,
compat_print, compat_print,
DateRange, DateRange,
decodeOption, decodeOption,
@ -611,7 +611,7 @@ def _real_main(argv=None):
if opts.usetitle and opts.useid: if opts.usetitle and opts.useid:
parser.error(u'using title conflicts with using video ID') parser.error(u'using title conflicts with using video ID')
if opts.username is not None and opts.password is None: if opts.username is not None and opts.password is None:
opts.password = getpass.getpass(u'Type account password and press return:') opts.password = compat_getpass(u'Type account password and press [Return]: ')
if opts.ratelimit is not None: if opts.ratelimit is not None:
numeric_limit = FileDownloader.parse_bytes(opts.ratelimit) numeric_limit = FileDownloader.parse_bytes(opts.ratelimit)
if numeric_limit is None: if numeric_limit is None:

View file

@ -6,6 +6,7 @@ import ctypes
import datetime import datetime
import email.utils import email.utils
import errno import errno
import getpass
import gzip import gzip
import itertools import itertools
import io import io
@ -1279,3 +1280,12 @@ def parse_xml(s):
parser = xml.etree.ElementTree.XMLParser(target=TreeBuilder()) parser = xml.etree.ElementTree.XMLParser(target=TreeBuilder())
kwargs = {'parser': parser} if sys.version_info >= (2, 7) else {} kwargs = {'parser': parser} if sys.version_info >= (2, 7) else {}
return xml.etree.ElementTree.XML(s.encode('utf-8'), **kwargs) return xml.etree.ElementTree.XML(s.encode('utf-8'), **kwargs)
if sys.version_info < (3, 0) and sys.platform == 'win32':
def compat_getpass(prompt, *args, **kwargs):
if isinstance(prompt, compat_str):
prompt = prompt.encode(getpreferredencoding())
return getpass.getpass(prompt, *args, **kwargs)
else:
compat_getpass = getpass.getpass