Fix getpass on Windows (Fixes #2547)
authorPhilipp Hagemeister <phihag@phihag.de>
Tue, 18 Mar 2014 13:27:42 +0000 (14:27 +0100)
committerPhilipp Hagemeister <phihag@phihag.de>
Tue, 18 Mar 2014 13:27:42 +0000 (14:27 +0100)
youtube_dl/__init__.py
youtube_dl/utils.py

index 0e9504c1485cdc4a6ba09968f1331615f0b8942f..07c9074fe2fe24c34fba062716f8ae175089d0fa 100644 (file)
@@ -56,7 +56,6 @@ __authors__  = (
 __license__ = 'Public Domain'
 
 import codecs
-import getpass
 import io
 import locale
 import optparse
@@ -68,6 +67,7 @@ import sys
 
 
 from .utils import (
+    compat_getpass,
     compat_print,
     DateRange,
     decodeOption,
@@ -611,7 +611,7 @@ def _real_main(argv=None):
     if opts.usetitle and opts.useid:
         parser.error(u'using title conflicts with using video ID')
     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:
         numeric_limit = FileDownloader.parse_bytes(opts.ratelimit)
         if numeric_limit is None:
index 3cf29e63a36a9210fefbd2c64e46839fb9434017..7e7d1e8b6fc3bcf5f604a51ecf95d8a1f68c2c8f 100644 (file)
@@ -6,6 +6,7 @@ import ctypes
 import datetime
 import email.utils
 import errno
+import getpass
 import gzip
 import itertools
 import io
@@ -1279,3 +1280,12 @@ def parse_xml(s):
     parser = xml.etree.ElementTree.XMLParser(target=TreeBuilder())
     kwargs = {'parser': parser} if sys.version_info >= (2, 7) else {}
     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