[compat] Fix compat_shlex_quote on Windows (closes #5889, closes #10254)
authorSergey M․ <dstftw@gmail.com>
Sat, 17 Jun 2017 16:14:24 +0000 (23:14 +0700)
committerSergey M․ <dstftw@gmail.com>
Sat, 17 Jun 2017 16:14:24 +0000 (23:14 +0700)
youtube_dl/compat.py

index 7ef3274517e3e1584a0a63fa5b4b5e3a91eb34df..9e4e13bcf6a5230995589ea1823873f5ac315c71 100644 (file)
@@ -2617,14 +2617,22 @@ except ImportError:  # Python 2
                 parsed_result[name] = [value]
         return parsed_result
 
-try:
-    from shlex import quote as compat_shlex_quote
-except ImportError:  # Python < 3.3
+
+compat_os_name = os._name if os.name == 'java' else os.name
+
+
+if compat_os_name == 'nt':
     def compat_shlex_quote(s):
-        if re.match(r'^[-_\w./]+$', s):
-            return s
-        else:
-            return "'" + s.replace("'", "'\"'\"'") + "'"
+        return s if re.match(r'^[-_\w./]+$', s) else '"%s"' % s.replace('"', '\\"')
+else:
+    try:
+        from shlex import quote as compat_shlex_quote
+    except ImportError:  # Python < 3.3
+        def compat_shlex_quote(s):
+            if re.match(r'^[-_\w./]+$', s):
+                return s
+            else:
+                return "'" + s.replace("'", "'\"'\"'") + "'"
 
 
 try:
@@ -2649,9 +2657,6 @@ def compat_ord(c):
         return ord(c)
 
 
-compat_os_name = os._name if os.name == 'java' else os.name
-
-
 if sys.version_info >= (3, 0):
     compat_getenv = os.getenv
     compat_expanduser = os.path.expanduser