|
|
@ -20,13 +20,14 @@ import re
|
|
|
|
import shutil
|
|
|
|
import shutil
|
|
|
|
import subprocess
|
|
|
|
import subprocess
|
|
|
|
import socket
|
|
|
|
import socket
|
|
|
|
import string
|
|
|
|
|
|
|
|
import sys
|
|
|
|
import sys
|
|
|
|
import time
|
|
|
|
import time
|
|
|
|
import tokenize
|
|
|
|
import tokenize
|
|
|
|
import traceback
|
|
|
|
import traceback
|
|
|
|
import random
|
|
|
|
import random
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from string import ascii_letters
|
|
|
|
|
|
|
|
|
|
|
|
from .compat import (
|
|
|
|
from .compat import (
|
|
|
|
compat_basestring,
|
|
|
|
compat_basestring,
|
|
|
|
compat_cookiejar,
|
|
|
|
compat_cookiejar,
|
|
|
@ -679,7 +680,7 @@ class YoutubeDL(object):
|
|
|
|
# correspondingly that is not what we want since we need to keep
|
|
|
|
# correspondingly that is not what we want since we need to keep
|
|
|
|
# '%%' intact for template dict substitution step. Working around
|
|
|
|
# '%%' intact for template dict substitution step. Working around
|
|
|
|
# with boundary-alike separator hack.
|
|
|
|
# with boundary-alike separator hack.
|
|
|
|
sep = ''.join([random.choice(string.ascii_letters) for _ in range(32)])
|
|
|
|
sep = ''.join([random.choice(ascii_letters) for _ in range(32)])
|
|
|
|
outtmpl = outtmpl.replace('%%', '%{0}%'.format(sep)).replace('$$', '${0}$'.format(sep))
|
|
|
|
outtmpl = outtmpl.replace('%%', '%{0}%'.format(sep)).replace('$$', '${0}$'.format(sep))
|
|
|
|
|
|
|
|
|
|
|
|
# outtmpl should be expand_path'ed before template dict substitution
|
|
|
|
# outtmpl should be expand_path'ed before template dict substitution
|
|
|
|