SyntaxError: EOL while scanning string literal

This is the code:

mycode = """
def set_env_variables(user, toImpersonate=False):
    template_path = {
        'APPDATA'           : u'{drive}:\\Users\\{user}\\AppData\\Roaming\\',
        'USERPROFILE'       : u'{drive}:\\Users\\{user}\\',
        'HOMEDRIVE'         : u'{drive}:',
        'HOMEPATH'          : u'{drive}:\\Users\\{user}',
        'ALLUSERSPROFILE'   : u'{drive}:\\ProgramData', 
        'COMPOSER_HOME'     : u'{drive}:\\Users\\{user}\\AppData\\Roaming\\Composer\\', 
        'LOCALAPPDATA'      : u'{drive}:\\Users\\{user}\\AppData\\Local',
    }"""

secret = base64.b64encode(mycode)
f = open('fdsf.txt','w')
f.write(secret)

This code writes the mycode variable in base64 to a file. I copy the contents from this file and try to call eval:

secret = """
CmRlZiBzZXRfZW52X3ZhcmlhYmxlcyh1c2VyLCB0b0ltcGVyc29uYXRlPUZhbHNlKToKCXRlbXBsYXRlX3BhdGggPSB7CgkJJ0FQUERBVEEnCQkJOiB1J3tkcml2ZX06XFVzZXJzXHt1c2VyfVxBcHBEYXRhXFJvYW1pbmdcJywKCQknVVNFUlBST0ZJTEUnCQk6IHUne2RyaXZlfTpcVXNlcnNce3VzZXJ9XCcsCgkJJ0hPTUVEUklWRScJCQk6IHUne2RyaXZlfTonLAoJCSdIT01FUEFUSCcJCQk6IHUne2RyaXZlfTpcVXNlcnNce3VzZXJ9JywKCQknQUxMVVNFUlNQUk9GSUxFJwk6IHUne2RyaXZlfTpcUHJvZ3JhbURhdGEnLCAKCQknQ09NUE9TRVJfSE9NRScJCTogdSd7ZHJpdmV9OlxVc2Vyc1x7dXNlcn1cQXBwRGF0YVxSb2FtaW5nXENvbXBvc2VyXCcsIAoJCSdMT0NBTEFQUERBVEEnCQk6IHUne2RyaXZlfTpcVXNlcnNce3VzZXJ9XEFwcERhdGFcTG9jYWwnLAoJfQ=="""
mydecode = base64.b64decode(secret)
eval(compile(mydecode,'<string>','exec'))

But I get this:

Traceback (most recent call last):
  File "testt.py", line 8, in <module>
    eval(compile(mydecode,'<string>','exec'))
  File "<string>", line 4
    'APPDATA'                   : u'{drive}:\Users\{user}\AppData\Roaming\',
                                                           ^
SyntaxError: EOL while scanning string literal

How can this be fixed?

PS Here is another example:

# -*- coding: utf-8 -*-
import os
import base64
a = '1'
mycode = """b = '3'
c = '4'"""

secret = """YiA9ICczJwpjID0gJzQn"""
mydecode = base64.b64decode(secret)
eval(compile(mydecode,'<string>','exec'))
res = a + b + c
print res #134 выводит, сценарий не выдает ошибок.
Author: insolor, 2018-08-10

1 answers

I screened "slashes" and it worked like this:

import base64

mycode = r"""
def set_env_variables(user, toImpersonate=False):
    template_path = {
        'APPDATA'           : ur'{drive}:\\Users\\{user}\\AppData\\Roaming\\',
        'USERPROFILE'       : ur'{drive}:\\Users\\{user}\\',
        'HOMEDRIVE'         : ur'{drive}:',
        'HOMEPATH'          : ur'{drive}:\\Users\\{user}',
        'ALLUSERSPROFILE'   : ur'{drive}:\\ProgramData', 
        'COMPOSER_HOME'     : ur'{drive}:\\Users\\{user}\\AppData\\Roaming\\Composer\\', 
        'LOCALAPPDATA'      : ur'{drive}:\\Users\\{user}\\AppData\\Local',
    }
    return template_path"""

secret = base64.b64encode(mycode)
f = open(r'C:\work\python\data\fdsf.txt','w')
f.write(secret)

secret = """
CmRlZiBzZXRfZW52X3ZhcmlhYmxlcyh1c2VyLCB0b0ltcGVyc29uYXRlPUZhbHNlKToKCXRlbXBsYXRlX3BhdGggPSB7CgkJJ0FQUERBVEEnCQkJOiB1J3tkcml2ZX06XFVzZXJzXHt1c2VyfVxBcHBEYXRhXFJvYW1pbmdcJywKCQknVVNFUlBST0ZJTEUnCQk6IHUne2RyaXZlfTpcVXNlcnNce3VzZXJ9XCcsCgkJJ0hPTUVEUklWRScJCQk6IHUne2RyaXZlfTonLAoJCSdIT01FUEFUSCcJCQk6IHUne2RyaXZlfTpcVXNlcnNce3VzZXJ9JywKCQknQUxMVVNFUlNQUk9GSUxFJwk6IHUne2RyaXZlfTpcUHJvZ3JhbURhdGEnLCAKCQknQ09NUE9TRVJfSE9NRScJCTogdSd7ZHJpdmV9OlxVc2Vyc1x7dXNlcn1cQXBwRGF0YVxSb2FtaW5nXENvbXBvc2VyXCcsIAoJCSdMT0NBTEFQUERBVEEnCQk6IHUne2RyaXZlfTpcVXNlcnNce3VzZXJ9XEFwcERhdGFcTG9jYWwnLAoJfQ=="""
mydecode = base64.b64decode(secret)
print mydecode
eval(compile(mydecode,'<string>','exec'))
print set_env_variables("dsdsd")
 1
Author: Eugene Dennis, 2018-08-10 13:28:53